【问题标题】:Merge two CSV files into one with pandas by ID通过 ID 使用 pandas 将两个 CSV 文件合并为一个
【发布时间】:2017-07-12 22:33:38
【问题描述】:

我整天都在努力寻找解决方案。阅读至少十几篇关于此主题的帖子,但似乎没有任何效果。

我有两个需要按 ID 合并的 csv 文件。这两个文件都有两个名称相同的列:Org ID 和 Org Name。以下是我的代码:

第一个文件

name_cols = ['GUID1', 'GUID2', 'Org ID', 'Org Name', 'Org Type', 'Chapter', 'Join Date', 'Effective Date', 'Expire Date']
pull_cols = ['Org ID', 'Org Name', 'Org Type', 'Chapter', 'Join Date', 'Effective Date','Expire Date']

df1 = pd.read_csv(path, header=None, encoding="ISO-8859-1", names=name_cols, usecols=pull_cols, index_col='Org ID')

第二个文件

name_cols = ['GUID1', 'Org ID', 'Org Name', 'Transaction Date', 'Product Name', 'Sales Price', 'Invoice Code', 'Payment Amount', 'Add Date']
pull_cols = ['Org ID', 'Org Name', 'Transaction Date', 'Product Name', 'Sales Price', 'Invoice Code', 'Payment Amount', 'Add Date']

df2 = pd.read_csv(path, header=None, encoding="ISO-8859-1", names=name_cols, usecols=pull_cols, index_col='Org ID')

我仍在探索 pandas,任何关于我应该如何处理它的线索都会非常有用。

【问题讨论】:

  • 你试过pd.merge(df1, df2, how='outer', on=['Org ID', 'Org Name'])吗? how= 可以更改为您喜欢的任何连接类型,介于“内”、“左”、“右”和“外”之间。
  • @cmaher 是的。那是我第一次去,但我得到了:KeyError: 'Org ID'
  • KeyError 告诉您密钥不在您的 DataFrame(s) 中。我建议您检查 df1df2 是否按预期导入。此外,您应该始终发布您已经尝试过的内容,以便 cmets/answers 尽可能高效。
  • @cmaher 谢谢。当我运行 df1.head() 和 df2.head() 时,我确实得到了包含 Org ID 的所有数据的输出。我正在查看我的 Jupyter 笔记本文件中的两个输出,并且可以看到两个表的数据。
  • 您可以使用df1['Org ID'] 语法从两个DataFrame 中访问Org ID 列?

标签: python csv pandas


【解决方案1】:

在聊天中讨论后,主要问题是“Org Id”被读取为索引。添加参数“index_col = False”就可以了:

df2 = pd.read_csv(path, header=None, encoding="ISO-8859-1", names=name_cols, usecols=pull_cols, index_col='Org ID')

剩下的就是做一个“内部”连接:

pd.merge(df1, df2, how='inner', on=['Org ID', 'Org Name'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多