1. 前言
在数据分析中,Pandas 是一个常用的工具包。Pandas 是 Python 编程语言的开源库,用于数据操作和数据分析。Pandas 可以轻松地处理比 Excel 表更大的数据,并且拥有更多的功能和高效的算法。在 Pandas 中,value_counts()
函数是一个相当实用的函数,可以用于统计数据中某个列不同取值的频次。在本文中,我们将要介绍 9 个能够提高数据分析效率的 value_counts()
小技巧。
2. 基础用法
value_counts()
函数最基本的功能就是统计一个 Pandas 数据框中某个列的不同取值出现的频次。例如,我们有一个名为 df
的数据框,其中有一个名为 gender
的列:
import pandas as pd
df = pd.read_csv('data.csv')
counts = df['gender'].value_counts()
print(counts)
上面代码中,我们使用 pd.read_csv()
函数读取了一个文件,然后使用 df['gender'].value_counts()
统计了该数据框中 gender
列中各个取值的频次,并将结果保存在 counts
变量中。最后,我们使用 print()
打印出了结果。我们可以看到,value_counts()
函数的默认输出结果是一个 DataFrame,其中包含两列:一列是各个取值,另一列是对应的频次。
3. 输出结果排序
有时候,我们希望按照value_counts()
统计出的频次对结果进行排序。这时,我们可以使用 sort_values()
函数。该函数可以按照指定的列对数据进行排序。例如,下面的代码可以将上面例子中 value_counts()
的结果按照频次从大到小排序:
counts = df['gender'].value_counts().sort_values(ascending=False)
print(counts)
上面代码中,我们在 value_counts()
中加入了 sort_values()
函数,指定按照降序排列,然后将结果保存在 counts
变量中,并打印出来。注意,sort_values()
函数默认是升序排序,因此我们需要将 ascending
参数设置为 False
才能得到降序的排序结果。
4. 呈现百分比
有时候,我们需要统计各个取值所占比例而不是总数。为了呈现结果为百分比,我们可以在计算频次时带上 normalize=True
参数。
percentages = df['gender'].value_counts(normalize=True)
print(percentages)
上面代码中,我们将 normalize
参数设置为 True
,表示要求得每个取值出现的比例而不是出现次数。注意到此时输出结果的两列都是浮点数,第二列的和是 1.0。
5. 取得指定的数量
有时候,我们只需要统计出现频率最高的前 n 项,而不需要全部统计出来。在 Pandas 中,有一个 nlargest()
函数可用于实现这一目的。例如,下面的代码将统计 gender
列中出现频次最高的前三个项:
top3 = df['gender'].value_counts().nlargest(3)
print(top3)
上面代码中,我们使用了 nlargest()
函数,其中传入的参数 3 表示要取出数量最大的前三项。注意到,输出结果只有三行。
6. 缺失值统计
在 Pandas 中,缺失值用 NaN 表示。当我们希望统计某个列的缺失值数量时,可以使用 value_counts()
的另一个参数——dropna=False
,例如:
missing = df['gender'].value_counts(dropna=False)
print(missing)
上面代码中,我们使用了 dropna=False
参数,表示不要删除缺失值,而是将缺失值单独作为一类进行统计。输出结果的最后一行即表示缺失值数量。
7. 增加标签
在统计结果中增加标签,可以让结果更加直观易懂。例如,下面的代码展示了如何在结果中增加标签:
with_labels = df['gender'].value_counts().rename_axis('Gender').reset_index(name='counts')
print(with_labels)
上面代码中,我们将列名为 gender
的列统计出现的频次,并将结果保存在 with_labels
变量中。然后使用 rename_axis()
函数和 reset_index()
函数分别重命名行索引和列名,最后输出结果。输出结果中,第一列是取值,第二列是出现次数,行索引是标签。
8. 对多列进行操作
在实际的数据分析中,我们不仅需要对单个列进行统计,也有可能需要对多个列进行统计。在 Pandas 中,可以使用多个列作为参数,并将结果存到一个数据框中。例如,下面的代码将统计 gender
和 age
两列的频次:
counts = df[['gender', 'age']].apply(pd.Series.value_counts).T.stack()
print(counts)
上面代码中,我们使用多个列作为参数,将 value_counts()
函数用于每个列,最后将结果在行列之间反转。注意到,输出结果是 Series 类型,其中第一列是 gender
和 age
的取值,第二列是出现次数。
9. 将结果可视化
除了输出结果外,我们还可以将结果可视化,更加清晰地呈现每一类的出现次数。在 Pandas 中,可以使用 plot()
函数进行可视化。例如,下面的代码将使用 plot()
函数将 gender
列的结果可视化:
df['gender'].value_counts().plot(kind='bar')
上面代码中,我们使用 value_counts()
函数统计 gender
列,并将结果进行可视化。输出结果是一个柱状图,其中 x 轴上列出了各个取值,y 轴表示不同取值的出现次数。
10. 总结
本文中,我们介绍了 9 个使用 value_counts()
函数提高数据分析效率的小技巧。其中,包括了基础用法、输出结果排序、呈现百分比、取得指定数量、缺失值统计、增加标签、对多列进行操作和将结果可视化等多个方面。这些小技巧可以让我们更加方便地统计数据,获取分析结果。