Python/Pandas DataFrame中的频率图

24 投票
2 回答
97842 浏览
提问于 2025-04-28 16:33

我有一个很大的数据表,里面有一些值和好几列数据:

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

撰写回答