Pandas dataframe hist不绘制catgorical变量

时间:2017-02-16 20:35:56

标签: python pandas dataframe

我有一个数据框,我想绘制每列的直方图。

df_play = pd.DataFrame({'a':['cat','dog','cat'],'b':['apple','orange','orange']})
df_play['a'] = df_play['a'].astype('category')
df_play['b'] = df_play['b'].astype('category')

df_play
df_play.hist(layout = (12,10))

然而我正在ValueError: num must be 1 <= num <= 0, not 1 当我尝试使用整数而不是值中的类别时,它工作得很好,但我真的希望唯一字符串的名称在x轴上。

3 个答案:

答案 0 :(得分:1)

您可以在列和绘图之间应用pd.value_counts

>>> df_play.apply(pd.value_counts).T.stack().plot(kind='bar')

enter image description here

如果你想要适当的子图或更复杂的东西,我建议你只使用value_counts进行迭代并自己创建子图。

答案 1 :(得分:0)

由于没有用于分箱的自然参数,或许您想要的而不是直方图是每个Series value counts的条形图?如果是这样,您可以通过

实现这一目标
df_play['a'].value_counts().plot(kind='bar')

Example bar plot

答案 2 :(得分:0)

我意识到要做到这一点的方法是首先指定fig和axs然后循环我们想要绘制值计数的数据帧的列名。

fig, axs = plt.subplots(1,len(df_play.columns),figsize(10,6))
for i,x in enumerate(df_play.columns):
    df_play[x].value_counts().plot(kind='bar',ax=axs[i])

enter image description here