合并与将60K csv的输出写入一个csv

时间:2017-05-24 20:55:58

标签: python csv pandas merge

我正在尝试在具有相同标头的目录中合并30K csv,我想将它们合并到一个文件中。使用下面的代码我只能合并但具有相同的标题,我不想在添加新文件后重复标题。

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

提前感谢!!

1 个答案:

答案 0 :(得分:1)

您的问题似乎出现在for loop中。语法不正确。

试试这个:

from glob import glob
all_df = []
for f in glob('path/*.csv'):
    temp_df = pd.read_csv(f)
    all_df.append(temp_df)
final_df = pd.concat(all_df)