Python 熊猫数据帧历史未绘制类别变量

Python 熊猫数据帧历史未绘制类别变量,python,pandas,dataframe,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)) 然而,我得到的是Val

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

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必须是1,因为并没有用于装箱的自然参数,也许您想要的不是直方图而是每个
系列的条形图?如果是这样,你可以通过

df_play['a'].value_counts().plot(kind='bar')

您只需跨列和绘图应用
pd.value\u计数即可

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


如果您想要合适的子图或更复杂的东西,我建议您只需使用
value\u counts
进行迭代,然后自己创建子图

我意识到这样做的一种方法是首先指定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])

并不是因为它更改了错误消息,而是因为您的第二行和第三行没有任何作用:
df_play['a']。astype('category')
不会更改
df_play['a']
(但会返回一个
系列,您可以用它替换原来的系列)。感谢您的关注。是否可以将
列a
b
作为子批次?该系列是否打算共享类别?如果是这样,
df_play.apply(lambda x:x.value_counts()).plot(kind='bar',subplot=True)
可能会满足您的需要。@fugledge否它们应该是分开的,而不是共享类别