9个value_counts()的小技巧,提高Pandas 数据分析效率

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 中,可以使用多个列作为参数,并将结果存到一个数据框中。例如,下面的代码将统计 genderage 两列的频次:

counts = df[['gender', 'age']].apply(pd.Series.value_counts).T.stack()

print(counts)

上面代码中,我们使用多个列作为参数,将 value_counts() 函数用于每个列,最后将结果在行列之间反转。注意到,输出结果是 Series 类型,其中第一列是 genderage 的取值,第二列是出现次数。

9. 将结果可视化

除了输出结果外,我们还可以将结果可视化,更加清晰地呈现每一类的出现次数。在 Pandas 中,可以使用 plot() 函数进行可视化。例如,下面的代码将使用 plot() 函数将 gender 列的结果可视化:

df['gender'].value_counts().plot(kind='bar')

上面代码中,我们使用 value_counts() 函数统计 gender 列,并将结果进行可视化。输出结果是一个柱状图,其中 x 轴上列出了各个取值,y 轴表示不同取值的出现次数。

10. 总结

本文中,我们介绍了 9 个使用 value_counts() 函数提高数据分析效率的小技巧。其中,包括了基础用法、输出结果排序、呈现百分比、取得指定数量、缺失值统计、增加标签、对多列进行操作和将结果可视化等多个方面。这些小技巧可以让我们更加方便地统计数据,获取分析结果。

后端开发标签