gpt4 book ai didi

python - 合并 pandas groupBy 对象

转载 作者:行者123 更新时间:2023-11-28 17:04:06 26 4
gpt4 key购买 nike

我有一个 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 是大约 10 亿美元的导出金额。 (请注意,数据是虚构的)

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 方式排列一次来节省时间。

非常感谢任何建议。

最佳答案

您可以使用 pd.concat 加入 groupby 结果,然后应用 sum:

>>> pd.concat([xd0,xd1],axis=1)
export export
origin dest year
aus ind 2000 6 6
2001 8 8
chn aus 2001 40 40
ind aus 2000 19 19
2001 42 42
2002 30 30
chn 2000 9 9
2001 13 13
2002 14 14

>>> pd.concat([xd0,xd1],axis=1).sum(axis=1)
origin dest year
aus ind 2000 12
2001 16
chn aus 2001 80
ind aus 2000 38
2001 84
2002 60
chn 2000 18
2001 26
2002 28

关于python - 合并 pandas groupBy 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com