Python value_counts()函数

Python value_counts()函数

Python value_counts()函数

1. 介绍

value_counts()函数是 pandas 库中的一个非常实用的函数,它用于统计一列数据中各个不同取值的出现频次。具体来说,value_counts()函数可以返回一个包含每个唯一值和对应频次的 pandas Series 对象。

在数据分析和数据清洗过程中,我们经常需要了解某个特定列中各个取值的分布情况,以作为进一步操作的依据。value_counts()函数可以方便地帮助我们实现这一目标,不仅可以统计常见的数字、字符串等类型的数据,还可以统计日期、时间等类型的数据。

在本文中,我们将详细介绍 value_counts() 函数的使用方法,并通过一些示例代码演示其用法。

2. value_counts()函数的语法

value_counts()函数的语法如下:

Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
Python

该函数有五个常用的参数,分别是:

  • normalize: 设置为 True 时,返回的频次会被归一化,即表示百分比。默认为 False
  • sort: 设置为 True 时,返回结果将按照频次从高到低排序。默认为 True
  • ascending: 设置为 True 时,返回结果将按照索引升序排序。默认为 False
  • bins: 设置为一个整数或者序列时,对结果进行分组统计。默认为 None,即不进行分组统计。
  • dropna: 设置为 True 时,不统计缺失值。默认为 True

3. 使用示例

首先,我们需要导入 pandas 库。如果你还没有安装该库,可以通过以下命令进行安装:

pip install pandas
Bash

我们使用这个库来模拟一些示例数据。假设我们有一个保存着学生考试成绩的数据集,该数据集包含姓名、科目和得分三列。我们将使用 value_counts() 函数对其中的一列进行统计。现在让我们来看看如何使用 value_counts() 函数。

import pandas as pd

# 创建示例数据
data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七', '周八', '王五'],
        '科目': ['数学', '英语', '数学', '英语', '数学', '数学', '英语'],
        '得分': [85, 90, 92, 78, 80, 85, 93]}

df = pd.DataFrame(data)

# 统计科目列的取值频次
counts = df['科目'].value_counts()

print(counts)
Python

输出结果如下:

数学    4
英语    3
Name: 科目, dtype: int64

我们可以看到,value_counts() 函数返回了一个包含科目列每个唯一值及对应频次的 Series 对象。在这个例子中,科目列有两个不同的取值:数学和英语,其中数学出现了4次,英语出现了3次。

接下来,我们来逐个介绍 value_counts() 函数的各个参数,并通过示例代码展示其不同的应用场景。

3.1 参数 normalize

参数 normalize 是一个布尔值,默认为 False。当该参数被设置为 True 时, value_counts() 函数将返回每个唯一值的百分比。

counts_normalized = df['科目'].value_counts(normalize=True)

print(counts_normalized)
Python

输出结果如下:

数学    0.571429
英语    0.428571
Name: 科目, dtype: float64

我们可以看到,返回的结果是每个唯一值的频次在总频次中所占的比例。在这个例子中,数学频次占总频次的57.14%,英语频次占总频次的42.85%。

3.2 参数 sort

参数 sort 是一个布尔值,默认为 True。当该参数被设置为 True 时,返回的结果将按照频次从高到低排序。

counts_sorted = df['科目'].value_counts(sort=True)

print(counts_sorted)
Python

输出结果如下:

数学    4
英语    3
Name: 科目, dtype: int64

我们可以看到,返回的结果按照频次从高到低进行了排序。

3.3 参数 ascending

参数 ascending 是一个布尔值,默认为 False。当该参数被设置为 True 时,返回的结果将按照索引升序排序。

counts_ascending = df['科目'].value_counts(ascending=True)

print(counts_ascending)
Python

输出结果如下:

英语    3
数学    4
Name: 科目, dtype: int64

我们可以看到,返回的结果按照索引的升序进行了排序。

3.4 参数 bins

参数 bins 可以用于对结果进行分组统计。它可以接受一个整数或者一个序列作为输入。当传入一个整数时,value_counts() 函数将对结果进行指定个数的分组统计。当传入一个序列时,value_counts() 函数将根据该序列进行分组统计,并按照序列中的值进行标记。下面的示例代码展示了这两种不同的应用场景。

# 按照指定个数进行分组统计
counts_binned = df['得分'].value_counts(bins=3)

print(counts_binned)
Python

输出结果如下:

(78.989, 84.0]    2
(84.0, 89.0]     3
(89.0, 93.0]     2
Name: 得分, dtype: int64

我们可以看到, value_counts() 函数将得分列的取值分为了3组,并返回了每个分组的频次。

接下来,我们再来看一个通过传入序列进行分组统计的示例。

# 按照指定序列进行分组统计
bounds = [0, 60, 80, 100]
labels = ['不及格', '及格', '优秀']

counts_grouped = df['得分'].value_counts(bins=bounds, labels=labels)

print(counts_grouped)
Python

输出结果如下:

不及格    0
及格     2
优秀     5
Name: 得分, dtype: int64

我们可以看到,返回的结果将得分列的取值分为了三组,并根据传入的标签进行了标记。在这个例子中,分数小于60分的被标记为”不及格”,分数在60分析
字到80分的被标记为”及格”,分数大于80分的被标记为”优秀”。

3.5 参数 dropna

参数 dropna 是一个布尔值,默认为 True。当该参数被设置为 True 时,value_counts() 函数将不统计缺失值。

# 添加一个缺失值
df.loc[7] = ['孙九', '数学', None]

counts_dropna = df['得分'].value_counts(dropna=True)

print(counts_dropna)
Python

输出结果如下:

85.0    2
80.0    1
90.0    1
93.0    1
92.0    1
78.0    1
Name: 得分, dtype: int64

我们可以看到,缺失值被排除在统计之外,返回的结果中没有缺失值。

4. 总结

本文介绍了 value_counts() 函数的使用方法,详细讲解了其语法和常用参数,并通过示例代码演示了不同参数的应用场景。value_counts() 函数是 pandas 中一项非常有用的功能,能够快速统计一列数据中不同取值的频次情况。在数据分析和数据清洗的过程中,我们经常需要了解数据的分布情况,value_counts() 函数可以帮助我们快速了解数据的统计信息,为后续操作提供依据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程