我有一个很大的DataFrame df,我想计算每个值。我不能这样做:
df = pandas.read_csv('my_big_data.csv')
values_df = df.apply(value_counts)
因为它是一个非常大的数据库。
我认为必须可以通过chunksize
块来实现这一点,但我看不出如何。
答案 0 :(得分:5)
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')
Chunk读取它并为每个块构造.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]