【问题标题】:take a join of two csv files over a common column in python在 python 中的一个公共列上连接两个 csv 文件
【发布时间】:2014-11-26 09:30:52
【问题描述】:

我有两个 csv 文件,它们具有以下字段:

文件 1:

objectID,objectName,objecttype

文件 2:

objectID,objectprice,objecttotalprice

这两个文件中的数据用,分隔。我想要的是通过objectID 加入这两个文件。输出应该已经加入了数据和文件 1 的数据与文件 2 不匹配。我尝试了这段代码,但它没有给出正确的输出:

import pandas as pd

a = pd.read_csv("file1.csv", names = ["objectID", "objectName", "objecttype"],header = 0).astype(basestring)

    b = pd.read_csv("file1.csv").astype(basestring)

    merged= a.merge(b, on='objectID',how='outer')

    merged.to_csv("output.csv", index=False)

当我运行它时,在输出中我得到file1 的数据(file2 的字段为空值),然后是file2 的数据(file1 的字段为空值)。

我在这里做错了什么以及如何正确地加入

注意:file1 中,文件名有点不同,因此我在阅读上面的 file1.csv 时正在重命名它们

【问题讨论】:

  • 你能提供这两个文件的样本吗?
  • @Marcin 不幸的是,由于一些权限问题,我无法提供示例。如果这些问题不存在,我会提供的
  • 有时不同的数据类型会破坏合并。如果它们是整数,请尝试将每一列强制为整数:df['col_name'] = df['col_name'].astype(int)
  • 我认为您正在使用相同的 csv 文件,即 file1.csv in ab

标签: python csv join pandas


【解决方案1】:

我认为您正在寻找左连接,请尝试

merged= a.merge(b, on='objectID', how='left')

它像 SQL 一样工作(参见documentation

【讨论】:

  • 我也这样做了,但输出与外部相同
  • 'left' 和 'outer' 应该会给你不同的结果,试试一些示例数据,例如a = pd.DataFrame([{'x': 1, 'y': 1}, {'x': 2, 'y': 2])b = pd.DataFrame([{'x': 1, 'z': 1}, {'x': 3, 'z': 3}])
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多