我有一个 CSV 格式的 2.92 亿行 (6GB) 的庞大数据集。Panda 的read_csv功能不适用于这么大的文件。因此,我正在使用以下代码以迭代方式读取小块(1000 万行)中的数据:
for chunk in pd.read_csv('hugeData.csv', chunksize=10**7):
#something ...
在#something 中,我根据某些列对行进行分组。所以在每次迭代中,我都会得到新的 groupBy 对象。我无法合并这些 groupBy 对象。
一个较小的虚拟示例如下:
这dummy.csv是一个 28 行的 CSV 文件,是某年某些国家之间的贸易报告。sitc是一些产品代码,export是出口金额在十亿美元左右。(请注意,数据是虚构的)
year,origin,dest,sitc,export
2000,ind,chn,2146,2
2000,ind,chn,4132,7
2001,ind,chn,2146,3
2001,ind,chn,4132,10
2002,ind,chn,2227,7
2002,ind,chn,4132,7
2000,ind,aus,7777,19
2001,ind,aus,2146,30
2001,ind,aus,4132,12
2002,ind,aus,4133,30
2000,aus,ind,4132,6
2001,aus,ind,2146,8
2001,chn,aus,1777,9
2001,chn,aus,1977,31
2001,chn,aus,1754,12
2002,chn,aus,8987,7
2001,chn,aus,4879,3
2002,aus,chn,3489,7
2002,chn,aus,2092,30
2002,chn,aus,4133,13
2002,aus,ind,0193,6
2002,aus,ind,0289,8
2003,chn,aus,0839,9
2003,chn,aus,9867,31
2003,aus,chn,3442,3
2004,aus,chn,3344,17
2005,aus,chn,3489,11
2001,aus,ind,0893,17
我将它分成两个 14 行的数据,并根据年份、来源、目的地对它们进行分组。
for chunk in pd.read_csv('dummy.csv', chunksize=14):
xd = chunk.groupby(['origin','dest','year'])['export'].sum();
print(xd)
结果 :
origin dest year
aus ind 2000 6
2001 8
chn aus 2001 40
ind aus 2000 19
2001 42
2002 30
chn 2000 9
2001 13
2002 14
Name: export, dtype: int64
origin dest year
aus chn 2002 7
2003 3
2004 17
2005 11
ind 2001 17
2002 14
chn aus 2001 15
2002 50
2003 40
Name: export, dtype: int64
如何合并两个 GroupBy 对象?
合并它们会不会再次在大数据中产生内存问题?通过看数据的性质来预测,如果正确合并行数肯定会减少至少 10-15 倍。
基本目标是:
鉴于原产国和目的地国,我需要绘制它们之间每年的总出口量。每次对整个数据进行查询都需要花费大量时间。
xd = chunk.loc[(chunk.origin == country1) & (chunk.dest == country2)]
因此,我想通过一次以 groupBy 方式排列它们来节省时间。
任何建议都非常感谢。
相关分类