我有一个所有类别变量的数据集,我想一次为所有变量产生频率计数。
据说,我使用的是鸢尾花数据集函数df['class'].value_counts()
仅允许我计算一个变量。
要分析数据集的所有变量,仅包含通过Pandas作为csv提取的分类变量。我正在考虑只提取第一行并放入for循环中。为了从csv文件中提取第一行,我们使用data = pd.DataFrame(data)
将csv转换为数据帧。但是,data[0]
将产生错误。
为所有变量生成频率分析或条形图的最有效方法是什么?
带有分类变量的样本数据集:
Mary John David Jenny
a t y n
a t n y
a u y y
a u n y
a u n n
b t y n
答案 0 :(得分:2)
方法1
df.apply(lambda x: x.value_counts()).T.stack()
输出:
Mary a 5.0
b 1.0
John t 3.0
u 3.0
David n 3.0
y 3.0
Jenny n 3.0
y 3.0
dtype: float64
方法2
df.apply(pd.value_counts).T.fillna(0)
输出
a b n t u y
Mary 5.0 1.0 0.0 0.0 0.0 0.0
John 0.0 0.0 0.0 3.0 3.0 0.0
David 0.0 0.0 3.0 0.0 0.0 3.0
Jenny 0.0 0.0 3.0 0.0 0.0 3.0
然后,您可以在下面简单地使用o创建条形图。
df.apply(pd.value_counts).T.stack().plot(kind='bar')
输出:
或者,您可以使用:
df.apply(pd.value_counts).fillna(0).T.plot(kind='bar')
输出:
答案 1 :(得分:1)
pd.DataFrame({i:df[i].value_counts() for i in df.columns})
注意:如果存在大量NaN,这将产生运行时错误,但是您可以忽略这些错误。如果您不喜欢NaN,只需使用
{i:df[i].value_counts() for i in df.columns}
答案 2 :(得分:1)