使用 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 逐块计算数据库块的值计数的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 最近 x 天的值的计数频率

pandas根据列数据的值范围计数?

SQL查询以逐块获取最新数据

每月、每年分组的值计数 - Pandas

Pandas 计数器通过跳过一行来计数并重置不同的值

从 csv 文件中逐块读取和反转数据并复制到新的 csv 文件