Python / Pandas DataFrame中的频率图

时间:2014-10-20 23:38:25

标签: python numpy matplotlib pandas

我有一个解析得非常大的数据框,其中包含一些像这样的值和几列:

Name Age Points ...
XYZ  42  32pts  ...
ABC  41  32pts  ...
DEF  32  35pts
GHI  52  35pts
JHK  72  35pts
MNU  43  42pts
LKT  32  32pts
LKI  42  42pts
JHI  42  35pts
JHP  42  42pts
XXX  42  42pts
XYY  42  35pts

我导入了numpy和matplotlib。

我需要绘制“点”列中的值出现次数的图表。我不需要为绘图设置任何箱子。因此,更多的情节是查看在大型数据集上出现相同分数的次数。

所以基本上条形图(或直方图,如果你可以称之为)应该显示32次出现三次,35次出现5次,42次出现4次。如果我可以按排序顺序绘制值,那就更好了。我试过df.hist()但它对我不起作用。 有线索吗?感谢。

2 个答案:

答案 0 :(得分:19)

直接绘制数据框的value_count方法的结果:

import matplotlib.pyplot as plt
import pandas

data = load_my_data()
fig, ax = plt.subplots()
data['Points'].value_counts().plot(ax=ax, kind='bar')

如果要从列中的所有元素中删除字符串'pnts',可以执行以下操作:

df['points_int'] = df['Points'].str.replace('pnts', '').astype(int)

这假设他们都以'pnts'结尾。如果它从一行到另一行变化,你需要查看这样的正则表达式: Split columns using pandas

官方文档:http://pandas.pydata.org/pandas-docs/stable/text.html#text-string-methods

答案 1 :(得分:0)

Seaborn软件包具有计数图功能,可用于制作频率图。

将seaborn导入为sns ax = sns.countplot(x =“ Points”,data = df)