Python – 计算 Pandas DataFrame 列值的数量
在数据分析或机器学习中,我们经常需要对数据进行一些基本统计分析,如计算某列值的频数。Pandas DataFrame 是数据分析中常用的数据类型,它提供了丰富的函数用于数据处理和分析。本文将介绍如何使用 Pandas 来计算 DataFrame 中某列值的数量。
1. 读取数据
首先,我们需要读取一个具有多列数据的数据集。Pandas 提供了多种读取文件格式的函数,如 read_csv() 用于读取 csv 文件,read_excel() 用于读取 excel 文件等。本文我们使用 read_csv() 函数读取一个 csv 文件:
import pandas as pd
df = pd.read_csv('data.csv', header=0)
df.head()
通过 header 参数指定第一行为列名,并使用 head() 函数查看读取的数据前五行:
ID Gender Age Grade
0 1 F 19.0 A
1 2 M 21.0 A
2 3 F 20.0 None
3 4 M NaN B
4 5 F 22.0 A
2. 计算列值数量
接下来,我们将使用 Pandas 的 value_counts() 函数来计算某列值的数量。这个函数可以统计 DataFrame 中某一列的每个值出现的次数,并返回一个 Series 类型的对象,其中每个值为索引,对应的值为出现的次数。
例如,我们要计算 DataFrame 中 Gender 列不同值的数量,可以使用以下代码:
gender_counts = df['Gender'].value_counts()
print(gender_counts)
运行结果如下:
F 8
M 7
Name: Gender, dtype: int64
这里我们使用 value_counts() 函数计算 Gender 列不同值的数量,并将结果保存在 gender_counts 变量中。然后使用 print() 函数输出结果。我们可以看到,Gender 列中共有 2 种不同的值,分别是 F 和 M,其中 F 出现了 8 次,M 出现了 7 次。
我们还可以指定计算 DataFrame 中其他列的值数量,比如 Age 列:
age_counts = df['Age'].value_counts()
print(age_counts)
输出结果如下:
20.0 3
22.0 3
19.0 2
21.0 2
Name: Age, dtype: int64
这里我们可以看到,Age 列中共有 4 种不同的值,分别是 20.0、22.0、19.0 和 21.0,其中 20.0 出现了 3 次,22.0 也出现了 3 次,19.0 和 21.0 分别出现了 2 次。
3. 过滤缺失值
在实际数据处理中,我们可能需要过滤掉缺失值,只统计 DataFrame 中非空列的值数量。Pandas 的 value_counts() 函数可以接受多个参数,其中 dropna 参数用于指定是否过滤空值,默认值为 True。
例如,我们可以计算 DataFrame 中 Grade 列非空值的数量:
grade_counts = df['Grade'].value_counts(dropna=True)
print(grade_counts)
输出结果如下:
A 6
B 2
Name: Grade, dtype: int64
这里我们使用 value_counts() 函数计算 Grade 列非空值的数量,并将结果保存在 grade_counts 变量中。由于 Grade 列中有缺失值,我们将 dropna 参数设为 True,表示过滤掉缺失值。
4. 按条件统计
有时候,我们需要统计 DataFrame 中某列满足特定条件的值的数量。可以使用 Pandas 的groupby() 函数分组计数。它可以按照指定的列对 DataFrame 进行分组,并统计每组中特定条件的值的数量。
例如,我们要统计 Gender 列中各个值对应的 Grade 值的数量,可以使用以下代码:
gender_grade_counts = df.groupby('Gender')['Grade'].value_counts()
print(gender_grade_counts)
输出结果如下:
Gender Grade
F A 4
B 2
M A 2
B 1
C 1
D 1
Name: Grade, dtype: int64
这里我们使用 groupby() 函数对 Gender 列进行分组,然后统计每组中 Grade 值的数量,并将结果保存在 gender_grade_counts 变量中。我们可以看到,Female 学生中有 4 人获得 A 级别,2 人获得 B 级别;Male 学生中有 2 人获得 A 级别,1 人获得 B 级别,1 人获得 C 级别,1 人获得 D 级别。
5. 按值排序
有时候,我们需要对 DataFrame 中的值按照数量进行排序,以便更好地可视化结果。可以使用 Pandas 的 sort_values() 函数对 Series 类型的对象按值进行排序。
例如,我们想对 Age 列中出现次数进行排序,可以使用以下代码:
age_counts = df['Age'].value_counts().sort_values(ascending=False)
print(age_counts)
输出结果如下:
20.0 3
22.0 3
19.0 2
21.0 2
Name: Age, dtype: int64
这里我们使用 value_counts() 函数计算 Age 列中不同值的数量,并使用 sort_values() 函数进行排序。由于 sort_values() 函数默认是按照升序排列,因此我们将参数 ascending 设为 False,表示按降序排列。
结论
本文介绍了使用 Pandas 计算 DataFrame 中某列值的数量的方法。我们可以使用 value_counts() 函数统计某列不同值的数量,dropna 参数过滤掉缺失值,groupby() 函数按列分组并统计数量。同时,我们还可以使用 sort_values() 函数按照数量排序,以便更好地可视化结果。这些方法对于数据分析和机器学习中的数据处理非常有用,可以帮助我们更深入地了解数据的分布情况和特征。