pandas.series.drop_duplicates() 不能删除所有重复项

时间:2021-01-11 09:54:36

标签: python pandas dataframe

>>> info
0                       (dataset, license, sources, weight)
1                       (dataset, license, sources, weight)
2                       (dataset, license, sources, weight)
3                       (dataset, license, sources, weight)
4                       (dataset, license, sources, weight)
                                ...                        
491877    (dataset, license, sources, surfaceEnd, surfac...
491878    (dataset, license, sources, surfaceEnd, surfac...
491879    (dataset, license, sources, surfaceEnd, surfac...
491880    (dataset, license, sources, surfaceEnd, surfac...
491881    (dataset, license, sources, surfaceEnd, surfac...
Name: edge_info, Length: 491882, dtype: object

>>> info.drop_duplicates()
0                   (dataset, license, sources, weight)
1                   (dataset, license, sources, weight)
70    (dataset, license, sources, surfaceEnd, surfac...
71    (dataset, license, sources, surfaceEnd, surfac...
Name: edge_info, dtype: object

>>> info.iloc[0]==info.iloc[1]
True
>>> info.iloc[0]==info.iloc[2]
True
>>> info.iloc[0]
dict_keys(['dataset', 'license', 'sources', 'weight'])
>>> 

上述命令需要一个系列对象来删除重复项。

然而,结果似乎仍然有如上所示的重复值。

info 的第一行 info.iloc[0] 和第二行 info.iloc[1] 是相等的,但是 drop_duplicates() 函数不会删除第二项。

有人知道结果的原因吗?

1 个答案:

答案 0 :(得分:1)

第一行和第二行相等的原因是您仍在检查原始数据帧,而不是从中删除重复项的输出。修改 DataFrame/Series 的 Pandas 中的大多数函数(但不是全部,总是查看文档),默认情况下它们不会更改原始数据,而是仅返回修改后的数据。

要解决您的问题,您有两种选择:

  1. 将修改后的数据赋值给变量::
    info = info.drop_duplicates()

  2. 设置参数 inplace=True(通过 default 这是 False)。这将更改数据框对象并返回 None。

    info.drop_duplicates(inplace=True)

以下是有关这两种方法的一些有用链接: