我的数据集包含数百个列和数千行
In [119]:
df.columns
Out[119]:
Index(['column 1', 'column2',
...
'column 100'],
dtype='object', name='var_name')
通常我为每一列都value_counts()
查看分布。
In [121]:
a = df['column1'].value_counts()
In [122]:
a
Out[122]:
1 77494
2 5389
0 2016
3 878
Name: column 1, dtype: int64
但是对于这个数据帧,如果我为每个列做了这个,这将使我的笔记本非常混乱,如何自动化这个?有没有帮助的功能?
如果您有其他信息,我的所有数据都是int64
,但我希望最佳答案可以提供适用于所有情况的解决方案。我想在pandas数据帧中做出解决方案答案。
基于@MaxU建议,这是我的简化数据框版本
df
id column1 column2 column3
1 3 1 7
2 3 2 8
3 2 3 7
4 2 1 8
5 1 2 7
我的预期输出是:
column 1 count
1 1
2 2
3 2
column 2 count
1 2
2 2
3 1
column 3 count
7 3
8 2
3 1
答案 0 :(得分:1)
你应该使用for循环。 这里all =所有列名列表。
all = list(df)
for I in all:
print(df[I].value_counts())
答案 1 :(得分:1)
我这样做:
In [83]: df.drop('id',1).apply(lambda c: c.value_counts().to_dict())
Out[83]:
column1 {3: 2, 2: 2, 1: 1}
column2 {2: 2, 1: 2, 3: 1}
column3 {7: 3, 8: 2}
dtype: object
或:
In [84]: for c in df.drop('id',1):
...: print(df[c].value_counts())
...:
3 2
2 2
1 1
Name: column1, dtype: int64 # <----- column name
2 2
1 2
3 1
Name: column2, dtype: int64
7 3
8 2
Name: column3, dtype: int64
答案 2 :(得分:1)
您可以按顺序生成所需的value_counts
,转换为数据框并写入csv:
import pandas as pd
with open('out.csv', 'w') as out:
for col in df.columns[1:]:
res = df[col].value_counts()\
.reset_index()\
.rename(columns={col: 'count', 'index': col})\
res.to_csv(out, index=False)