调整字典中的数据然后绘制

时间:2018-10-01 18:11:45

标签: python pandas

我有

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()

enter image description here

我的问题是,如何从创建的字典中删除nan,如何将条形图的顺序更改为1-5?前三个nan是数据中的空白点(自轮询以来是有意的),最后一个是该列的标题。我尝试手动将plt.bar的范围部分更改为1-5,但似乎不起作用。

1 个答案:

答案 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)

enter image description here