5.385 精通Pandas:value_counts()函数深度解析与实战应用
- 原理介绍
- 统计成员占比的重要性
- value_counts()函数详解
- 常见应用场景
- 实操代码例子
- 基本用法示例
- 处理缺失值
- 自定义排序
- 多列统计
- 性能优化技巧
- 参考文献
原理介绍
统计成员占比的重要性
在数据分析中,了解数据集中各个成员的分布情况是非常重要的。这可以帮助我们发现数据中的模式、异常值和潜在问题。value_counts()
函数是Pandas库中一个非常强大的工具,用于统计DataFrame或Series中每个唯一值的出现次数,并计算其占总样本数的比例。
value_counts()函数详解
value_counts()
函数的基本语法如下:
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
normalize
: 如果设置为True
,则返回的是频率而不是计数。sort
: 是否按值进行排序。ascending
: 排序方式,默认为降序。bins
: 用于分箱(binning)操作。dropna
: 是否忽略NaN值。
常见应用场景
- 数据探索:了解数据集中各值的分布情况。
- 特征工程:识别重要特征和稀有值。
- 数据清洗:检测和处理异常值。
- 可视化:生成柱状图等图表。
实操代码例子
基本用法示例
假设我们有一个包含学生考试成绩的数据集:
import pandas as pd
# 创建示例数据
data = {
'students': ['Alice', 'Bob', 'Charlie', 'David', 'Eva', 'Frank'],
'scores': [90, 85, 90, 70, 85, 100]
}
df = pd.DataFrame(data)
# 使用value_counts()统计成绩分布
score_counts = df['scores'].value_counts()
print(score_counts)
# 输出
90 2
85 2
70 1
100 1
Name: scores, dtype: int64
处理缺失值
如果数据集中存在缺失值,可以使用dropna=False
来保留这些缺失值的统计信息:
# 添加一些缺失值
df.loc[0, 'scores'] = None
# 统计成绩分布,包括缺失值
score_counts_with_na = df['scores'].value_counts(dropna=False)
print(score_counts_with_na)
# 输出
90.0 2
85.0 2
70.0 1
100.0 1
NaN 1
Name: scores, dtype: int64
自定义排序
可以通过传递ascending=True
参数来改变排序方式:
# 按升序统计成绩分布
score_counts_ascending = df['scores'].value_counts(ascending=True)
print(score_counts_ascending)
# 输出
100 1
70 1
85 2
90 2
Name: scores, dtype: int64
多列统计
可以对多个列分别进行统计:
# 统计不同学生的成绩分布
student_counts = df['students'].value_counts()
print(student_counts)
# 输出
Alice 1
Bob 1
Charlie 1
David 1
Eva 1
Frank 1
Name: students, dtype: int64
计算频率
通过设置normalize=True
,可以得到每个值的频率:
# 计算成绩的频率
score_frequencies = df['scores'].value_counts(normalize=True)
print(score_frequencies)
# 输出
90.0 0.25
85.0 0.25
70.0 0.125
100.0 0.125
NaN 0.25
Name: scores, dtype: float64
分箱操作
使用bins
参数可以对数值进行分箱统计:
# 对成绩进行分箱统计
score_bins = df['scores'].value_counts(bins=3)
print(score_bins)
# 输出
(70.0, 90.0] 4
(90.0, 100.0] 1
NaN 1
Name: scores, dtype: int64
性能优化技巧
对于大数据集,可以通过以下方法提高性能:
- 减少不必要的排序:如果不需要排序,可以设置
sort=False
。 - 避免多次调用:尽量一次性完成所有需要的操作,避免多次调用
value_counts()
。
# 避免多次调用
score_counts = df['scores'].value_counts(sort=False)
print(score_counts)
# 输出
90 2
85 2
70 1
100 1
Name: scores, dtype: int64
参考文献
参考资料名字 | 链接 |
---|---|
Pandas官方文档 | https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.value_counts.html |
数据科学中的Pandas | https://realpython.com/python-data-cleaning-numpy-pandas/ |
使用Pandas进行数据处理 | https://towardsdatascience.com/data-wrangling-with-pandas-9b5c8d9e5f8a |
Python数据分析教程 | https://www.datacamp.com/community/tutorials/pandas-tutorial-dataframe-python |
Pandas进阶技巧 | https://www.geeksforgeeks.org/python-pandas-series-value_counts/ |