Python/Pandas DataFrame中的频率图

SMU*_*SMU 7 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
Run Code Online (Sandbox Code Playgroud)

我导入了numpy和matplotlib.

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

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

Pau*_*l H 24

只需直接绘制数据框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')
Run Code Online (Sandbox Code Playgroud)

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

df['points_int'] = df['Points'].str.replace('pnts', '').astype(int)
Run Code Online (Sandbox Code Playgroud)

这假设他们都以'pnts'结束.如果它在一行之间变化,你需要查看这样的正则表达式: 使用pandas拆分列

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


小智 11

Seaborn 包具有countplot可用于制作频率图的功能:

import seaborn as sns

ax = sns.countplot(x="Points",data=df)
Run Code Online (Sandbox Code Playgroud)