lyd*_*ias 5 python numpy count pandas
我有一个所有分类变量的数据集,我想立即生成所有变量的频率计数。
据说,我使用的 Iris 数据集函数df['class'].value_counts()只允许我计算一个变量。
要分析数据集的所有变量,仅包含通过 Pandas 提取为 csv 的分类变量。我正在考虑仅提取第一行并放入 for 循环中。为了从 csv 文件中提取第一行,我们使用 .csv 将 csv 转换为数据帧data = pd.DataFrame(data)。但是,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
Run Code Online (Sandbox Code Playgroud)
方法一
df.apply(lambda x: x.value_counts()).T.stack()
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
方法2
df.apply(pd.value_counts).T.fillna(0)
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)
然后,您可以简单地使用下面的 o 创建条形图。
df.apply(pd.value_counts).T.stack().plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
输出:
或者,您可以使用:
df.apply(pd.value_counts).fillna(0).T.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
输出: