我有一个包含以下类别的CSV文件:item1
,item2
,item3
,item4
这些值恰好是以下类别之一:0
1
,2
,3
,4
。
我想为每个项目计算每个值有多少。
我的代码如下,df是相应的DataFrame:
outputDf = pandas.DataFrame()
cat_list = list(df.columns.values)
for col in cat_list:
s = df.groupby(col).size()
outputDf[col] = s
当我使用chunksize
读取CSV时,我想使用read_csv
参数完全相同,因为我的CSV非常大。
我的问题是:我找不到找到cat_list
的方法,也无法构建outputDf
。
有人能给我一个暗示吗?
答案 0 :(得分: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而不是{{1 }}。)
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
。)