我有一個大的(3.5GB)工作.csv文件,我不能完全在內存中處理和希望:如何檢查一個大的csv的每一行,如果某列中包含某個特定的值,則可以寫入該行?
- 讀取數據的一行
- 檢查一個字段等於給定條件
- 如果爲true,則將該行附加到新的.csv文件。如果爲假,直到達到原始文件的末尾
的最終結果將是包含與條件匹配的所有行單獨的.csv跳到下一行
我有一個大的(3.5GB)工作.csv文件,我不能完全在內存中處理和希望:如何檢查一個大的csv的每一行,如果某列中包含某個特定的值,則可以寫入該行?
的最終結果將是包含與條件匹配的所有行單獨的.csv跳到下一行
我發現以下爲我工作。請注意,這也爲列表中的每個條件值生成了一個單獨的輸出文件。
import csv
# criteria is the column number from the source data to check against the values list
criteria = 4
valueslist= ['criteria1','criteria2','criteria3']
for item in valueslist:
with open('sourcedata.csv', 'rb') as inf, open(item + '.csv','wb') as outf:
reader = csv.reader(inf)
writer = csv.writer(outf)
# -- Write Headers as first row
writer.writerow(["column1", "column2", "column3"])
for row in reader:
if row[criteria] == item:
writer.writerow(row)
請嘗試下面的代碼。設置合適數量的記錄(您的機器允許)爲塊大小。
chunksize = 10 ** 5
for chunk in pd.read_csv(filename, chunksize=chunksize):
df=df.append (chunk [chunk.field==criterion])
我會做這種方式:
chunksize = 10**6 // 2 # you may want to adjust it ...
for chunk in pd.read_csv(filename, chunksize=chunksize):
(chunk.query('condition1 & condition2 & ... ')
.to_csv('output.csv', mode='a', index=False))
訣竅是mode='a'
參數,它會指導大熊貓補充,而不是覆蓋CSV文件行...
請提供您已經編寫的代碼,以便我們可以幫助您做到正確。 – TehSphinX
[在Python中讀取大文本文件,一行一行地將其加載到內存中](http://stackoverflow.com/questions/6475328/read-large-text-files-in-python-line-by-line-沒有加載到內存中) – rsm
歡迎朋友。爲了讓你的問題對於想要幫助的人能夠理解和「有吸引力」,請考慮發佈你迄今嘗試過的任何代碼,你試圖分析的* .csv的一些代表行,等等。 。付出一些努力吧.. –