使用pandas中的chunksize参数提取每个值的基本计数

2 投票
1 回答
549 浏览
提问于 2025-04-18 18:04

我有一个CSV文件,里面有以下几类:item1item2item3item4,它们的值只能是以下之一:01234。我想统计每个项目在每个值下有多少个。

outputDf = pandas.DataFrame()
cat_list = list(df.columns.values)
for col in cat_list:
        s = df.groupby(col).size()
        outputDf[col] = s

我想用chunksize这个参数来读取我的CSV文件,因为我的CSV文件非常大。我的问题是:我找不到办法来获取cat_list,也不知道怎么构建outputDf

有人能给我点提示吗?

1 个回答

3

我建议你用 value_counts 按列来处理,而不是用 groupby

>>> df = pd.read_csv("basic.csv", usecols=["item1", "item2", "item3", "item4"])
>>> df.apply(pd.value_counts)
   item1  item2  item3  item4
0     17     26     17     20
1     21     21     22     19
2     17     18     22     23
3     24     14     20     24
4     21     21     19     14

对于分块处理的版本,我们只需要把各个部分组合起来(记得用 fillna(0),这样如果某个部分没有3,比如,就会得到0,而不是 nan)。

>>> df_iter = pd.read_csv("basic.csv", usecols=["item1", "item2", "item3", "item4"], chunksize=10)
>>> sum(c.apply(pd.value_counts).fillna(0) for c in df_iter)
   item1  item2  item3  item4
0     17     26     17     20
1     21     21     22     19
2     17     18     22     23
3     24     14     20     24
4     21     21     19     14

当然,实际上你可能会想用尽可能大的 chunksize

撰写回答