python - 导出 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 的预期结果
解决方案
要隔离(并删除?)您的重复项,这取决于您拥有什么样的重复项。正如你所说的 k33da_the_bug,没有数据不容易。
但是,这个想法是:
如果重复项只是在值上,您可以使用以下方法过滤它们:
df[df.duplicated()]
如果它在索引上,
df[df.index.duplicated()]
如果它在两者上
df[(df.duplicated()) & (df.index.duplicated())]
假设 df 是您的数据框 df_both。如果您想单独操作,您也可以将其仅应用于左侧或仅应用于右侧。但如果这样做,合并时可能会再次出现重复项。
推荐阅读
- php - 从多维数组中提取路径
- bash - 使用 bash 为 kafka 主题创建 json 的问题
- c# - 如何将 AngularJS 变量值传递给 C# 控制器?
- oracle - Oracle:计算百分比并更新表格
- css - 将元素变成卡片
- javascript - 如何通过白名单域正则表达式验证电子邮件
- python-3.x - 如何在日志中查看 MySqlHook 结果
- python - 在 Anaconda 中安装新模块:Keyerror('pkgs_dirs',)
- office-js - OfficeJs:Outlook 插件:Dialog API 的 messageParent 不能与 OWA 一起使用
- javascript - 如何映射和更改数组内的值?