
本文介绍了如何使用 Pandas 将包含数值和非数值数据的年龄信息分配到预定义的分类区间中,包括处理缺失值和非标准格式数据,并确保结果分类的顺序符合特定要求。通过示例代码,读者可以学习如何有效地使用 pd.cut 和 pd.Categorical 函数进行数据转换和分类。
在数据分析中,经常需要将连续的数值数据转换为离散的分类数据,这有助于简化数据、提取关键信息,并方便进行后续的统计分析和建模。本文将详细介绍如何使用 Pandas 库将包含年龄信息的列数据分配到预定义的分类区间中,并处理可能存在的缺失值和非标准格式数据。
准备工作
首先,确保已经安装了 Pandas 和 NumPy 库。如果没有安装,可以使用 pip 进行安装:
pip install pandas numpy
数据准备
为了演示,我们创建一个包含年龄信息的 DataFrame,其中包含数值、非数值(例如 "45-55")和缺失值:
import pandas as pd
import numpy as np
data = {'age': ['45-55', '20', '56', '35', None, 'sixty-nine']}
df = pd.DataFrame(data)
print(df)输出:
age 0 45-55 1 20 2 56 3 35 4 None 5 sixty-nine
定义分类区间和标签
接下来,我们需要定义分类区间和对应的标签。题目要求如下:
- 分类区间:unknown, 17 and under, 18-25, 26-35, 36-45, 46-55, 56+
- 非数值数据和缺失值都归为 unknown 类
- 分类标签的顺序为:['unknown', '17 and under', '18-25', '26-35', '36-45', '46-55', '56+']
定义区间和标签:
芝麻乐开源众筹系统采用php+mysql开发,基于MVC开发,适用于各类互联网金融公司使用,程序具备模板分离技术,您可以根据您的需要进行应用扩展来达到更加强大功能。前端使用pintuer、jquery、layer等....系统易于使用和扩展简单的安装和升级向导多重业务逻辑判断,预防出现bug后台图表数据方式,一目了然后台包含但不限于以下功能:用户认证角色管理节点管理管理员管理上传配置支付配置短信平
bins = [-float('inf'), -1, 17, 25, 35, 45, 55, float('inf')]
labels = ['unknown', '17 and under', '18-25', '26-35', '36-45', '46-55', '56+']注意:这里在 -float('inf') 和 17 之间添加了一个 -1,这是为了确保所有非数值数据,在转换为数值时变为 NaN,最终都被 fillna 函数填充为 unknown。 这样可以更明确地将所有无法转换为有效年龄的条目归类为“unknown”。
使用 pd.cut 进行分类
使用 pd.cut 函数将年龄数据分配到定义的区间中:
df['age_cat'] = pd.cut(pd.to_numeric(df['age'], errors='coerce'),
bins=bins, labels=labels)\
.fillna('unknown')
print(df)解释:
- pd.to_numeric(df['age'], errors='coerce'):将 'age' 列转换为数值类型。errors='coerce' 表示无法转换的值将被转换为 NaN。
- pd.cut(...):将数值年龄数据分配到定义的区间中,并使用指定的标签。
- .fillna('unknown'):将所有 NaN 值(包括原始的缺失值和无法转换为数值的值)填充为 'unknown'。
调整分类的顺序
题目要求 'unknown' 类别必须在第一位。 为了保证顺序,我们可以使用pd.Categorical指定category的顺序。
df['age_cat'] = pd.Categorical(df['age_cat'], categories=['unknown', '17 and under', '18-25', '26-35', '36-45', '46-55', '56+'], ordered=False) print(df['age_cat'])
输出:
0 unknown 1 18-25 2 56+ 3 26-35 4 unknown 5 unknown Name: age_cat, dtype: category Categories (7, object): ['unknown', '17 and under', '18-25', '26-35', '36-45', '46-55', '56+']
完整代码
import pandas as pd
import numpy as np
data = {'age': ['45-55', '20', '56', '35', None, 'sixty-nine']}
df = pd.DataFrame(data)
bins = [-float('inf'), -1, 17, 25, 35, 45, 55, float('inf')]
labels = ['unknown', '17 and under', '18-25', '26-35', '36-45', '46-55', '56+']
df['age_cat'] = pd.cut(pd.to_numeric(df['age'], errors='coerce'),
bins=bins, labels=labels)\
.fillna('unknown')
df['age_cat'] = pd.Categorical(df['age_cat'], categories=['unknown', '17 and under', '18-25', '26-35', '36-45', '46-55', '56+'], ordered=False)
print(df)
print(df['age_cat'])总结
本文详细介绍了如何使用 Pandas 将年龄数据分配到预定义的分类区间中,并处理了缺失值和非标准格式数据。 通过使用 pd.cut 和 pd.Categorical 函数,可以灵活地进行数据转换和分类,并确保结果符合特定的要求。 在实际应用中,可以根据具体的需求调整分类区间和标签,以适应不同的数据分析任务。









