我有
x = collections.Counter(df.f.values.tolist())
if 'nan' in x:
del x['nan']
plt.bar(range(len(x)), x.values(), align='center')
plt.xticks(range(len(x)), list(x.keys()))
plt.show()
我的问题是,如何从创建的字典中删除nan,如何将条形图的顺序更改为1-5?前三个nan是数据中的空白点(自轮询以来是有意的),最后一个是该列的标题。我尝试手动将plt.bar的范围部分更改为1-5,但似乎不起作用。
答案 0 :(得分:2)
您可以在.value_counts
上使用pandas.Series
,以简单地获取每个值出现的次数。这样可以很容易地制作一个barplot。
默认情况下,value_counts
将忽略NaN
的值,因此可以解决这一问题,并且通过使用.sort_index()
我们可以保证按顺序绘制这些值。看来我们需要使用.to_frame()
,以便它只为该列绘制一种颜色(它为Series
每行选择一种颜色)。
import pandas as pd
import numpy as np
# Get your plot settings
import seaborn as sns
sns.set()
np.random.seed(123)
df = pd.DataFrame({'f': np.random.randint(1,6,100)})
df = df.append(pd.DataFrame({'f': np.repeat(np.NaN,1000)}))
df.f.value_counts().to_frame().sort_index().plot(kind='bar', legend=False)