如何使用内存有限的python处理两个或多个Big CSV文件?

时间:2018-04-23 06:34:20

标签: python-3.x pandas csv bigdata pandas-datareader

我只能使用4G内存。 文件的信息如下:

File    | Number of Rows  | Num of cols | Header name 
1st csv | 2,000,000+ rows | 3 cols.     | id1,id2,...
2nd csv | 10,000,000+ rows| 24 cols.    | id2,...
3rd csv | 170 rows        | 5 cols.     | id1,...

file information image

我想做的是:

file1=pd.read_csv('data1.csv')
file2=pd.read_csv('data2.csv')
file3=pd.read_csv('data3.csv')
data=pd.merge(file1,file3,on='id1',how='left')
data=pd.merge(data,file2,on='id2',how='left')
#data to csv files: merge.csv

但内存不够,我尝试了两种方法: 第一种方式是:

for data1_chunk in data1:
    for data2_chunk in data2:
        data = pd.merge(data1_chunk, data2_chunk, on='id2')
        data_merge = pd.concat([data_merge, data])

第二种方式是:

for data1_chunk, data2_chunk in zip(data1, data2):
    data_merge = pd.merge(data1_chunk, data2_chunk, on='id2', how='left')

但它们不起作用。

有没有办法使用para chunksize来处理大型csv文件? 还是其他更好或更简单的方法?

问题How to read a 6 GB csv file with pandas只说明如何处理一个大的csv文件而不是两个或更多,我想知道如何处理'迭代器'两个或多个内存有限的文件

1 个答案:

答案 0 :(得分:1)

我发现使用下面的代码可能在逻辑上起作用:

Dim StrURL
Dim ObjhShell
StrURL="http://localhost:7171/"
Set ObjShell = CreateObject("Wscript.Shell")
'ObjShell.Run ""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security"
ObjShell.Run "chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security"

我认为需要更多次但内存更少。