pandas熊猫库.drop_duplicates()去除重复项

先看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 

语音图像视频推荐深度-学习群

你可能感兴趣的:(python)