2017-05-24 91 views
-3

我想將30K csvs合併到具有相同頭文件的目錄中,我想將它們合併到一個文件中。與下面的代碼,我只能合併,但具有相同的標題,我不想在添加新文件的位置後重復標題。將60K csv的輸出合併並寫入一個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

什麼是你正在運行到這個問題? – pvg

+0

@pvg更新了問題..更改了代碼和錯誤 –

+1

這實際上與熊貓或標題沒有任何關係。似乎你想要將該模式集中起來,然後迭代它生成的文件名。你應該看看如何做到這一點,因爲你嘗試的方式是非常不對的。 – pvg

回答

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) 
+0

Wen concat使用的所有標題也採取..我需要標題只有一次在csv合併後 –

+0

'pd.concat'不會給你多個標題。我的理解是每個文件都有自己的頭文件。糾正我,如果我錯了。如果文件沒有標題,請告訴我,以便我可以相應地修改代碼。 –

+0

每個文件都有相同的標題..並且我想將所有這些文件合併到一個大文件以供將來處理。 –