Python复制了df.duplicated和df.drop_duplicated,但未找到所有重复项

Python复制了df.duplicated和df.drop_duplicated,但未找到所有重复项,python,pandas,Python,Pandas,我在使用duplicated或drop_duplicates查找/删除数据帧中的所有副本时遇到问题 我的数据看起来像这样,但是,我的数据有52k行长 data = {'inventory number':['WL-SMART-INWALL', 'WL-NMDISH-22', 'WL-MPS546-MESH', 'WAS-WG-500P',

我在使用duplicated或drop_duplicates查找/删除数据帧中的所有副本时遇到问题

我的数据看起来像这样,但是,我的数据有52k行长

data = {'inventory number':['WL-SMART-INWALL',
                         'WL-NMDISH-22',
                         'WL-MPS546-MESH',
                         'WAS-WG-500P',
                         'UKS/99757/69975',
                         'UKS/99757/69975',
                         'UKS/99750/S26361F2293L10',
                         'UKS/99750/S26361F2293L10',
                         'UKS/99733/69973',
                         'UKS/99733/69973',
                         'UKS/99727/AHD6502TU3CBK',
                         'UKS/99727/AHD6502TU3CBK',
                         'UKS/99725/PMK01',
                         'UKS/99725/PMK01',
                         'UKS/99294/A3L791R15MS',
                         'UKS/99294/A3L791R15MS',
                         'UKS/98865/58018251',
                         'UKS/98865/58018251',
                         'UKS/98509/90Q653AN1N0N2UA0',
                         'UKS/98509/90Q653AN1N0N2UA0',
                         'UKS/97771/FIBLCSC2',
                         'UKS/97771/FIBLCSC2',
                         'UKS/97627/FIBLCLC1',
                         'UKS/97627/FIBLCLC1'],
        'minimum price': ['36.85',
                         '55.45',
                         '361.29',
                         '265.0',
                         '22.46',
                         '22.46',
                         '15.0',
                         '15.0',
                         '26.71',
                         '26.71',
                         '104.0',
                         '104.0',
                         '32.3',
                         '32.3',
                         '22.51',
                         '22.51',
                         '13.0',
                         '13.0',
                         '9.59',
                         '9.59',
                         '15.0',
                         '15.0',
                         '15.0',
                         '15.0'],
    'cost':['26.11',
                         '39.23',
                         '254.99',
                         '187.09',
                         '16.0',
                         '16.0',
                         '10.7',
                         '10.7',
                         '19.0',
                         '19.0',
                         '73.46',
                         '73.46',
                         '23.0',
                         '23.0',
                         '16.0',
                         '16.0',
                         '9.29',
                         '9.29',
                         '7.0',
                         '7.0',
                         '10.7',
                         '10.7',
                         '10.7',
                         '10.7']
   }
df = pd.DataFrame(data=data)
我通过将上周的目录添加到本周底部来生成数据框。我只想对已经更改的“库存编号”进行处理,或者我想要增量。我想我可以附加这两个,确保它们是相同的数据类型,重新索引,并删除重复项,但当我将CSV写入QA时,仍然有数千个重复项

combined.head(50).duplicated()
这是我的密码:

_import['inventory number'] = _import['inventory number'].str.encode('utf-8')
ts_data['inventory number'] = ts_data['inventory number'].str.encode('utf-8')
overlap = overlap.append(ts_data, ignore_index=True)
overlap_dedupe = overlap[overlap.duplicated(['inventory  number','minimum price','cost'],keep=False)==False]
我也尝试过:

overlap_dedupe = overlap.drop_duplicates(keep=False)
所以,我知道我遇到了某种编码问题,因为现在我没有得到重复

combined.head(50).duplicated()
返回:

42736    False
32567    False
43033    False
33212    False
46592    False
46023    False
32568    False
33520    False
32756    False
26741    False
46133    False
42737    False
42480    False
40227    False
40562    False
49623    False
27712    False
31848    False
49794    False
27296    False
38198    False
35674    False
27907    False
22210    False
40563    False
18025    False
49624    False
18138    False
19357    False
43698    False
24398    False
50566    False
22276    False
38382    False
20507    False
43550    False
18150    False
29968    False
19247    False
47706    False
19248    False
43955    False
20731    False
38199    False
44168    False
17580    False
15944    False
44891    False
28327    False
16027    False
dtype: bool




这些是姐妹函数,它们可以很好地协同工作

使用您的
df

df = pd.read_json(
    ''.join(
        ['[[26.11,"WL-SMART-INWALL",36.85],[39.23,"WL-NMDISH-22",55.45',
         '],[73.46,"UKS\\/99727\\/AHD6502TU3CBK",104.0],[73.46,"UKS\\/997',
         '27\\/AHD6502TU3CBK",104.0],[23.0,"UKS\\/99725\\/PMK01",32.3],[2',
         '3.0,"UKS\\/99725\\/PMK01",32.3],[16.0,"UKS\\/99294\\/A3L791R15MS',
         '",22.51],[16.0,"UKS\\/99294\\/A3L791R15MS",22.51],[9.29,"UKS\\/',
         '98865\\/58018251",13.0],[9.29,"UKS\\/98865\\/58018251",13.0],[7',
         '.0,"UKS\\/98509\\/90Q653AN1N0N2UA0",9.59],[7.0,"UKS\\/98509\\/90',
         'Q653AN1N0N2UA0",9.59],[254.99,"WL-MPS546-MESH",361.29],[10.7',
         ',"UKS\\/97771\\/FIBLCSC2",15.0],[10.7,"UKS\\/97771\\/FIBLCSC2",1',
         '5.0],[10.7,"UKS\\/97627\\/FIBLCLC1",15.0],[10.7,"UKS\\/97627\\/F',
         'IBLCLC1",15.0],[187.09,"WAS-WG-500P",265.0],[16.0,"UKS\\/9975',
         '7\\/69975",22.46],[16.0,"UKS\\/99757\\/69975",22.46],[10.7,"UKS',
         '\\/99750\\/S26361F2293L10",15.0],[10.7,"UKS\\/99750\\/S26361F229',
         '3L10",15.0],[19.0,"UKS\\/99733\\/69973",26.71],[19.0,"UKS\\/997',
         '33\\/69973",26.71]]']
    )
)
我们可以清楚地看到,有重复的

df.duplicated()

0     False
1     False
2     False
3      True
4     False
5      True
6     False
7      True
8     False
9      True
10    False
11     True
12    False
13    False
14     True
15    False
16     True
17    False
18    False
19     True
20    False
21     True
22    False
23     True
dtype: bool
df.duplicated().any()

True
因为我们没有传递
keep
参数,所以我们假设默认值是
keep='first'
。这意味着此系列中的每个
True
都表示一行是其上方另一行的副本,其
duplicated
状态为
False

我们可以走捷径,只需得到一个答案,即是否存在与

df.duplicated()

0     False
1     False
2     False
3      True
4     False
5      True
6     False
7      True
8     False
9      True
10    False
11     True
12    False
13    False
14     True
15    False
16     True
17    False
18    False
19     True
20    False
21     True
22    False
23     True
dtype: bool
df.duplicated().any()

True
调用
drop\u duplicates

df.drop_duplicates().duplicated().any()

False
太好了!它起作用了。
这可以用酒精保存

df =  df.drop_duplicates()
df

         0                           1       2
0    26.11             WL-SMART-INWALL   36.85
1    39.23                WL-NMDISH-22   55.45
2    73.46     UKS/99727/AHD6502TU3CBK  104.00
4    23.00             UKS/99725/PMK01   32.30
6    16.00       UKS/99294/A3L791R15MS   22.51
8     9.29          UKS/98865/58018251   13.00
10    7.00  UKS/98509/90Q653AN1N0N2UA0    9.59
12  254.99              WL-MPS546-MESH  361.29
13   10.70          UKS/97771/FIBLCSC2   15.00
15   10.70          UKS/97627/FIBLCLC1   15.00
17  187.09                 WAS-WG-500P  265.00
18   16.00             UKS/99757/69975   22.46
20   10.70    UKS/99750/S26361F2293L10   15.00
22   19.00             UKS/99733/69973   26.71
只是为了确保

df.duplicated().any()

False

结论

这对我很管用。希望本演示能帮助您解决任何问题。

您能给出一个小数据框的示例,它愚弄了
duplicated()
?@DYZ我编辑了我提供的示例,使其成为我的代码使用drop\u duplicates生成的前25行。然而,我在这个样本上运行了drop-replices,它工作得非常好。$@Yale-Newman那么恐怕没有什么帮助。在一个问题被解决之前,我们应该能够重现它。我读过,也许是内存问题?但是50k行乘3列不应该太多?有没有比删除重复项更有效的方法?我应该成批这样做吗50K什么都不是。这不是内存问题。为什么你不能展示一个没有被移除的复制品的例子呢?当我从我自己的例子开始时,一切都很好。这让我觉得这和我的数据有关。我正在从查询中读取数据,并从ftp导入数据,以获得两个起始数据帧。然后我将它们附加在一起,并试图去除所有重复项,以便留下增量。它就是不起作用。你对我如何调试这个有什么建议吗?如果您运行测试
df.duplicated().any()
并返回
True
,您可以演示我如何使用groupby。那么你有重复的。但是,您说它不起作用意味着
df.drop\u duplicates().duplicated().any()
返回
True
。这是我不相信的。除非!你是说它看起来像是重复的。你是不是只是眼巴巴地看着这些数据,然后告诉我看起来仍然有重复的数据?如果是这样的话,这让我相信你认为存在重复,而事实上不是因为某些非印刷字符使它们不同。不,我完全同意,一定是某种编码差异或某些非印刷字符导致它们不同。在excel中,您可以执行修剪之类的操作。有没有一种方法可以让我清理我的数据,看看是否有效?或者我应该采取什么步骤来查找未打印的字符?我肯定遇到了某种编码问题,因为在运行附加和删除重复项之前,我只是将代码转换为unicode编码字符串,现在我没有得到任何重复项,而以前我会得到几千个。