【问题标题】:If I have a Python list of CSV files, how do I merge them all into one giant CSV file?如果我有一个 CSV 文件的 Python 列表,如何将它们全部合并到一个巨大的 CSV 文件中?
【发布时间】:2018-03-26 17:26:25
【问题描述】:

我创建了一个这样的文件列表:

merge_files = []
for i in range(2, 12):
    merge_files.append(pandas.read_csv(final_user_study_path + "/P" + str(i) + "/DataCollection/data/merge.csv"))

我想用这个列表中的所有文件创建一个巨大的csv 文件。

这是最有效的方法吗?

【问题讨论】:

  • @matthewDaly 是对的.. 把它们放在一起。
  • 虽然 Python 在这方面确实可能有点矫枉过正,但您可以在 Python 中快速构建逻辑以排除某些路径、遍历某些子路径并进行过滤等。目前尚不清楚 OP 是要使用一次还是多次。

标签: python list file csv


【解决方案1】:

我推荐 unix shell。如果他们没有标题,或者只有第一个标题:

cat file1.csv file2.csv ... fileN.csv > result.csv

如果他们有标题,你必须先把它们剪掉:

cat file1.csv > result.csv
for i in {1..N}; do tail +2 file$i.csv >> result.csv; done

如果文件位于不同的目录 - 使用每个文件的路径:

cat path1/file.csv path2/file.csv > result.csv

【讨论】:

  • 如果它们在不同的目录中,文件名相同,我还能这样做吗?
【解决方案2】:

pandas 方法是在数据帧上使用 concat,如果您也想做一些操作(如过滤、删除重复项...等),这可能很有用

import io
import pandas as pd

让我们创建两个文件

csv1 = "a,b\n1,2"
csv2 = "a,b\n3,4"

file1 = io.StringIO(csv1)
file2 = io.StringIO(csv2)

遍历它们并连接:

pd.concat((pd.read_csv(i) for i in [file1,file2])).to_csv(index=False)

结果:

'a,b\n1,2\n3,4\n'

以可读的方式为您改编(我的首选方式):

files = []
for i in range(2, 12):
    path = "{}/P{}/DataCollection/data/merge.csv".format(final_user_study_path,i)
    files.append(path)

pd.concat((pd.read_csv(i) for i in files)).to_csv("output.csv",index=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    相关资源
    最近更新 更多