Skip to content

Commit d0a7fc2

Browse files
DOC - improving docstring and user guide for deduplicate (#1739)
Co-authored-by: Gael Varoquaux <gael.varoquaux@normalesup.org>
1 parent 094211f commit d0a7fc2

2 files changed

Lines changed: 88 additions & 0 deletions

File tree

doc/modules/configuration_and_utils/deduplicate_categorical_data.rst

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,61 @@ dtype: object
4747
'white', 'white', 'white', 'white', 'white']
4848

4949
See the |deduplicate| documentation for caveats and more detail.
50+
51+
Deduplicating values in a dataframe
52+
-----------------------------------
53+
54+
|deduplicate| can be used to replace values in a dataframe that contains typos.
55+
This can be done with ``deduplicate_correspondence`` computed above and the
56+
``map`` function in pandas, or the ``replace`` function in polars.
57+
>>> import pandas as pd
58+
>>> df = pd.DataFrame({'color': duplicated, 'value': range(10)})
59+
>>> df
60+
color value
61+
0 blacs 0
62+
1 black 1
63+
2 black 2
64+
3 black 3
65+
4 black 4
66+
5 uhibe 5
67+
6 white 6
68+
7 white 7
69+
8 white 8
70+
9 white 9
71+
>>> df['deduplicated_color'] = df['color'].map(deduplicate_correspondence.to_dict())
72+
>>> df
73+
color value deduplicated_color
74+
0 blacs 0 black
75+
1 black 1 black
76+
2 black 2 black
77+
3 black 3 black
78+
4 black 4 black
79+
5 uhibe 5 white
80+
6 white 6 white
81+
7 white 7 white
82+
8 white 8 white
83+
9 white 9 white
84+
85+
With polars:
86+
>>> import polars as pl # doctest: +SKIP
87+
>>> df = pl.DataFrame({'color': duplicated, 'value': range(10)}) # doctest: +SKIP
88+
>>> df.with_columns(deduplicated_color = pl.col("color").replace( # doctest: +SKIP
89+
... deduplicate_correspondence.to_dict())
90+
... )
91+
shape: (10, 3)
92+
┌───────┬───────┬────────────────────┐
93+
│ color ┆ value ┆ deduplicated_color │
94+
│ --- ┆ --- ┆ --- │
95+
│ str ┆ i64 ┆ str │
96+
╞═══════╪═══════╪════════════════════╡
97+
│ blacs ┆ 0 ┆ black │
98+
│ black ┆ 1 ┆ black │
99+
│ black ┆ 2 ┆ black │
100+
│ black ┆ 3 ┆ black │
101+
│ black ┆ 4 ┆ black │
102+
│ uhibe ┆ 5 ┆ white │
103+
│ white ┆ 6 ┆ white │
104+
│ white ┆ 7 ┆ white │
105+
│ white ┆ 8 ┆ white │
106+
│ white ┆ 9 ┆ white │
107+
└───────┴───────┴────────────────────┘

skrub/_deduplicate.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,36 @@ def deduplicate(
228228
>>> deduplicated
229229
['black', 'black', 'black', 'black', 'black', \
230230
'white', 'white', 'white', 'white', 'white']
231+
232+
It is possible to use the deduplication function to replace values in a DataFrame
233+
column:
234+
>>> import pandas as pd
235+
>>> df = pd.DataFrame({'color': duplicated, 'value': range(10)})
236+
>>> df
237+
color value
238+
0 blacs 0
239+
1 black 1
240+
2 black 2
241+
3 black 3
242+
4 black 4
243+
5 uhibe 5
244+
6 white 6
245+
7 white 7
246+
8 white 8
247+
9 white 9
248+
>>> df['deduplicated_color'] = df['color'].map(deduplicate_correspondence.to_dict())
249+
>>> df
250+
color value deduplicated_color
251+
0 blacs 0 black
252+
1 black 1 black
253+
2 black 2 black
254+
3 black 3 black
255+
4 black 4 black
256+
5 uhibe 5 white
257+
6 white 6 white
258+
7 white 7 white
259+
8 white 8 white
260+
9 white 9 white
231261
"""
232262
unique_words, counts = np.unique(X, return_counts=True)
233263
distance_mat = compute_ngram_distance(

0 commit comments

Comments
 (0)