首页 > 解决方案 > 导出 2 个 csv 文件中的非重复行

问题描述

我有 2 个 csv 文件 data1[649] 行和 data2[395] 行。两者都有 [30] 列。通过比较这 30 列中的 13 列,我可以获得出现在两个文件中的 382 行。但是,我试图获取两个文件中都没有出现的行,如下所示:

merged = pd.merge(data1,data2,how='outer',
 on=["col1","col2","col3","col4","col5","col6","col7","col8","col9","col10","col11","col12","col13"], 
 indicator=True)

df_both = merged[merged._merge == 'both']
print(df_both)
df_left = merged[merged._merge == 'left_only']
print(df_left)
df_right = merged[merged._merge == 'right_only']
print(df_right)

结果令人困惑,因为我预计df_left会是 [267 行 x 14 列],但我得到了 [275 行 x 14 列]

同样df_right,我得到 [25 行 x 14 列] 而不是 [12 行 x 14 列]

我是用错了还是有另一种方法来提取不重复的行?注意到我得到了df_both[382 rows x 14 columns]的正确结果

我已经尝试过 how=outer/inner/left/right,但没有返回任何 df_left 和 df_right 的预期结果

标签: pythonpandascsv

解决方案


要隔离(并删除?)您的重复项,这取决于您拥有什么样的重复项。正如你所说的 k33da_the_bug,没有数据不容易。

但是,这个想法是:

如果重复项只是在值上,您可以使用以下方法过滤它们:

df[df.duplicated()]

如果它在索引上,

df[df.index.duplicated()]

如果它在两者上

df[(df.duplicated()) & (df.index.duplicated())]

假设 df 是您的数据框 df_both。如果您想单独操作,您也可以将其仅应用于左侧或仅应用于右侧。但如果这样做,合并时可能会再次出现重复项。


推荐阅读