【问题标题】:Panda's merge several csv's with one common columnPanda 将多个 csv 与一个公共列合并
【发布时间】:2015-09-09 18:27:33
【问题描述】:

我有 13 个 csv 文件要合并。我想尝试 pandas 和 python,但我很挣扎。

有 3 种类型的文件,关键是 1) 有列 a b c d 2) 有 a b c d 列(其中 a 不包含来自 1 的任何内容) 3) 有 a b c d e f g 列(其中 a 包含所有来自 1 和 2 的列)

我怎样才能将这些全部合并到一个包含所有文件中所有信息的 csv 中?

【问题讨论】:

  • pd.concat 有帮助吗?
  • 我早些时候尝试过,但后来我发现它并没有按照我的要求做,因为它不会检查唯一列是否已经在他们的列表中

标签: python csv pandas


【解决方案1】:

您应该使用内置的reduce method 进行如下外部合并:

files = ['file1.csv', 'file2.csv', ...] # the 13 files
dataframes = [ pandas.read_csv( f ) for f in files ] # add arguments as necessary to the read_csv method
merged = reduce(lambda left,right: pandas.merge(left,right,on='a', how='outer'), dataframes)

【讨论】:

  • 并将其作为 CSV 返回,我只需执行 merge.to_csv('merged.csv')
  • 你可以试试这个,然后用 excel 之类的加载它,看看它的样子。有几种方法可以解决这个问题。您还可以尝试发布一些示例输入和您想要的输出(可以是非常基本的)
  • 由于数量庞大,输入几乎是随机的,但它就像序列号等,所以它包含字母数字和引号字符,那么我必须设置什么 dtype 以及如何设置?
【解决方案2】:

很难在没有看到示例数据的情况下准确地编写它。但这应该可以帮助您入门。

import pandas as pd
df = pd.read_csv('file1.csv')
df = df.append(pd.read_csv('file2.csv'))  #this one adds more rows to the dataframe
df = df.join(pd.read_csv('file3.csv'), on=[a,b,c,d], how='left') # this one will add columns if they match data

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 2017-08-07
    • 2019-04-17
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2021-07-07
    相关资源
    最近更新 更多