【问题标题】:Merge two csv files based on key and secondary key根据key和secondary key合并两个csv文件
【发布时间】:2016-06-11 13:42:17
【问题描述】:

我想合并两个csv文件如下:

csv1:

formula,solver,runtime,conflicts
CBS_k3_n100_m403_b30_13.cnf,SWDiA5BY,0.001842,318
CBS_k3_n100_m403_b30_13.cnf,glucose,0.001842,318

csv2:

formula,entropy,num sols
CBS_k3_n100_m403_b30_13.cnf,0.202,707286

想要的输出:

formula,solver,runtime,conflicts,entropy,solutions
CBS_k3_n100_m403_b30_13.cnf,SWDiA5BY,0.001842,318,0.202,707286
CBS_k3_n100_m403_b30_13.cnf,glucose,0.001842,318,0.202,707286

所以我在两个字典(csv)的键之间做了一个交集,并使用了列表理解

keysA = set(dict1.keys())
keysB = set(dict2.keys())
keys = keysA & keysB
...
[[key] + dict1.get(key, []) + dict2.get(key, []) for key in keys]

但是有一些“重复”行(我需要),其中字段 formula 是相同的,但字段 solver 不是,我的输出是:

formula,solver,runtime,conflicts,entropy,solutions
CBS_k3_n100_m403_b30_13.cnf,SWDiA5BY,0.001842,318,0.202,707286

如何使用列表理解来保留这些行?或以任何其他方式

感谢您的帮助

编辑 - 添加示例

【问题讨论】:

  • 你的问题不清楚。这些“重复行”是否都在 csv1 中,这是唯一存在 solver 的文件?您希望如何处理重复行?每个键最多可以有一个值,但该值可以是一个列表。您想要每个 公式 的值列表吗?您应该向我们展示一个数据示例以及该数据的预期结果。

标签: python csv


【解决方案1】:

你为什么不使用熊猫。在 pandas 中很容易做到这一点

import pandas as pd
df1=pd.read_csv("1.csv")
df=pd.read_csv("2.csv")
result=df1.merge(df,on="formula")
result.to_csv("result.csv")

您也可以使用result=df1.merge(df,on="formula",how="outer") 来保留您的一个 csv 具有但另一个没有的公式

【讨论】:

  • 我相信你的意思是 result=df1.merge(df,on="formula",how="left") ,因为外连接保留所有行,谢谢!
  • "left" 表示左外连接,表示df 独占的行将在result 中丢失。这里我说的是完整的外连接以保留所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2019-12-21
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
相关资源
最近更新 更多