Python/Pandas DataFrame中的频率图
我有一个很大的数据表,里面有一些值和好几列数据:
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这两个库。
我想画一个图,显示“Points”这一列中每个分值出现的次数。我不需要把数据分成不同的区间,所以这个图主要是为了看看在这么大的数据集中,相同的分数出现了多少次。
简单来说,我想画一个柱状图(或者说直方图也行),显示32分出现了三次,35分出现了五次,42分出现了四次。如果能把这些值按顺序排列,那就更好了。我试过用df.hist(),但对我来说不太管用。
有没有什么建议?谢谢。
2 个回答
14
Seaborn这个包里有一个叫做countplot
的函数,可以用来制作频率图。
import seaborn as sns
ax = sns.countplot(x="Points",data=df)
50
我会直接把数据框的 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' 结尾的。如果每一行的情况不一样,你就需要用到正则表达式,像这样: 使用 pandas 拆分列
还有官方文档: http://pandas.pydata.org/pandas-docs/stable/text.html#text-string-methods