使用pandas中的chunksize参数提取每个值的基本计数
我有一个CSV文件,里面有以下几类:item1
、item2
、item3
、item4
,它们的值只能是以下之一:0
、1
、2
、3
、4
。我想统计每个项目在每个值下有多少个。
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
。