【发布时间】:2017-10-25 09:12:18
【问题描述】:
我正在尝试将 30K csvs 合并到具有相同标题的目录中,并且我想将它们合并到一个文件中。使用下面的代码,我只能合并但具有相同的标题,并且我不想在添加新文件之后重复标题。
import pandas as pd
f = r'path/*.csv
combined_csv = pd.concat([ pd.read_csv(f) for f in filenames ])
combined_csv.to_csv('output.csv', index=False, header=True)
错误:
Traceback (most recent call last):
File "merg_csv.py", line 4, in <module>
combined_csv = pd.concat([ pd.read_csv(f) for f in filenames ])
NameError: name 'filenames' is not defined
编辑:以下答案中提供的解决方案有效,但一段时间后内存被使用,程序冻结并冻结我的屏幕。
import glob
import pandas as pd
all_data = pd.dataFrame()
dfs = []
for f in glob.glob("*.csv"):
df = pd.read_csv(f, error_bad_lines=False)
dfs.append(df)
all_data = pd.concat(dfs, ignore_index=True)
all_data.to_csv("00_final.csv", index=None, header=True)
如何同时合并和写入输出文件,这样我就不会遇到内存不足的错误。输入的大小约为1.5gb,文件数超过60K
提前致谢!!
【问题讨论】:
-
您遇到了什么问题?
-
@pvg 更新了问题.. 更改了代码和错误
-
这与熊猫或标题没有任何关系。似乎您想要 glob 该模式,然后迭代它生成的文件名。你应该看看如何做到这一点,因为你尝试它的方式不是它。
-
见stackoverflow.com/questions/3964681/… 和许多其他类似的答案。