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否它们应该是分开的,而不是共享类别