使用 pandas 逐块计算数据库块的值计数
Posted
技术标签:
【中文标题】使用 pandas 逐块计算数据库块的值计数【英文标题】:value counts of a Database chunk by chunk using pandas 【发布时间】:2014-09-24 14:42:49 【问题描述】:我有一个很大的 DataFrame df,我想计算每个值。我做不到:
df = pandas.read_csv('my_big_data.csv')
values_df = df.apply(value_counts)
因为它是一个非常大的数据库。
我认为必须可以使用chunksize
逐块进行,但我不知道如何。
【问题讨论】:
【参考方案1】:In [9]: pd.set_option('max_rows',10)
构造一个示例框架
In [10]: df = DataFrame(np.random.randint(0,100,size=100000).reshape(-1,1))
In [11]: df
Out[11]:
0
0 50
1 35
2 20
3 66
4 8
... ..
99995 51
99996 33
99997 43
99998 41
99999 56
[100000 rows x 1 columns]
In [12]: df.to_csv('test.csv')
块读取它并为每个块构造.value_counts
连接所有这些结果(这样您就有了一个由计数值索引的帧,而这些值就是计数)。
In [13]: result = pd.concat([ chunk.apply(Series.value_counts) for chunk in pd.read_csv('test.csv',index_col=0,chunksize=10000) ] )
In [14]: result
Out[14]:
0
18 121
75 116
39 116
55 115
60 114
.. ...
88 83
8 83
56 82
76 76
18 73
[1000 rows x 1 columns]
然后按将所有重复项(索引)放在一个组中的索引进行分组。求和给出单个 value_counts 的总和。
In [15]: result.groupby(result.index).sum()
Out[15]:
0
0 1017
1 1015
2 992
3 1051
4 973
.. ...
95 1014
96 949
97 1011
98 999
99 981
[100 rows x 1 columns]
【讨论】:
以上是关于使用 pandas 逐块计算数据库块的值计数的主要内容,如果未能解决你的问题,请参考以下文章