先看help的结果
>>> help(data.drop_duplicates)
Help on method drop_duplicates in module pandas.core.frame:
drop_duplicates(subset:collections.abc.Hashable=None, keep:Union[str, bool]='first', inplace:bool=False, ignore_index:bool=False) -> Union[_ForwardRef('DataFrame'), NoneType] method of pandas.core.frame.DataFrame instance
Return DataFrame with duplicate rows removed.
Considering certain columns is optional. Indexes, including time indexes
are ignored.
Parameters
----------
subset : column label or sequence of labels, optional
Only consider certain columns for identifying duplicates, by
default use all of the columns.
keep : {'first', 'last', False}, default 'first'
Determines which duplicates (if any) to keep.
- ``first`` : Drop duplicates except for the first occurrence.
- ``last`` : Drop duplicates except for the last occurrence.
- False : Drop all duplicates.
inplace : bool, default False
Whether to drop duplicates in place or to return a copy.
ignore_index : bool, default False
If True, the resulting axis will be labeled 0, 1, …, n - 1.
subset可以是列名字或者多个名字的序列[],默认为所有列
keep默认为first,也就是说当有重复项时保留第一个出现的。
关于第一个参数我表示不理解,或者说解释的不对,如下:
>>> df
user_id gender age occupation zip
456790 6040 2 3 7 467
456672 6040 2 3 7 467
456732 6040 2 3 7 467
456641 6040 2 3 7 467
456842 6040 2 3 7 467
... ... ... ... ... ...
455239 6033 2 6 14 2464
455229 6033 2 6 14 2464
455756 6036 1 3 16 1153
455616 6036 1 3 16 1153
455253 6033 2 6 14 2464
[1000 rows x 5 columns]
当设置subset为默认时,得到如下结果,可见并不是所有的项都进行了过滤,可以发现只有第一项user_id过滤了重复项
>>> df.drop_duplicates()
user_id gender age occupation zip
456790 6040 2 3 7 467
536334 6039 1 5 1 14
997766 6038 1 7 2 627
456495 6037 1 5 2 2368
455556 6036 1 3 16 1153
455329 6035 1 3 2 2491
970011 6034 2 3 15 3064
455241 6033 2 6 14 2464
那么我将其他项放在第一列试试看结果,然而你会发现结果是一样的,并没有区别,woc???这是什么鬼啊?
>>> df2
gender age occupation zip user_id
456790 2 3 7 467 6040
456672 2 3 7 467 6040
456732 2 3 7 467 6040
456641 2 3 7 467 6040
456842 2 3 7 467 6040
... ... ... ... ... ...
455239 2 6 14 2464 6033
455229 2 6 14 2464 6033
455756 1 3 16 1153 6036
455616 1 3 16 1153 6036
455253 2 6 14 2464 6033
[1000 rows x 5 columns]
>>> df2.drop_duplicates()
gender age occupation zip user_id
456790 2 3 7 467 6040
536334 1 5 1 14 6039
997766 1 7 2 627 6038
456495 1 5 2 2368 6037
455556 1 3 16 1153 6036
455329 1 3 2 2491 6035
970011 2 3 15 3064 6034
455241 2 6 14 2464 6033
后经搜索发现,每列是一个特征,每条数据包括几个特征项,所以默认的subset表示考虑所有特征项相同才算重复,而这时恰好与只考虑user_id来做去重的结果是相同的,可以将keep设置为last再试一次,估计结果就不同了【这个不同是指每条数据的顺序不同,如果不考虑顺序,那么数据仍旧是相同的】。
>>> df.drop_duplicates()
user_id gender age occupation zip
456790 6040 2 3 7 467
536334 6039 1 5 1 14
997766 6038 1 7 2 627
456495 6037 1 5 2 2368
455556 6036 1 3 16 1153
455329 6035 1 3 2 2491
970011 6034 2 3 15 3064
455241 6033 2 6 14 2464
>>> df.drop_duplicates(keep='last')
user_id gender age occupation zip
456746 6040 2 3 7 467
536358 6039 1 5 1 14
997775 6038 1 7 2 627
456574 6037 1 5 2 2368
970022 6034 2 3 15 3064
455411 6035 1 3 2 2491
455616 6036 1 3 16 1153
455253 6033 2 6 14 2464
下面展示一个按照user_id去重的例子
>>> dd2
user_id gender age occupation zip
456790 6040 2 3 7 467
536334 6039 1 5 1 14
997766 6038 1 7 2 627
456495 6037 1 5 2 2368
455556 6036 1 3 16 1153
455329 6035 1 3 2 2491
970011 6034 2 3 15 3064
455241 6033 2 6 14 2464
0 6033 1 16 0 110
>>> dd2.drop_duplicates('user_id')
user_id gender age occupation zip
456790 6040 2 3 7 467
536334 6039 1 5 1 14
997766 6038 1 7 2 627
456495 6037 1 5 2 2368
455556 6036 1 3 16 1153
455329 6035 1 3 2 2491
970011 6034 2 3 15 3064
455241 6033 2 6 14 2464
另外有相关问题可以加入QQ群讨论,不设微信群
QQ群:868373192
语音图像视频推荐深度-学习群