11.4 数据类型转换与标准化实战案例
Pandas数据类型转换与标准化实战案例 - 新手入门指南
本章节通过三个实战案例,详细讲解如何使用Pandas进行数据类型批量转换、字符串清洗和数值标准化,解决数据运算错误,提取有效信息,适配后续建模,适合数据分析新手学习。
推荐工具
数据类型转换与标准化实战案例
引言
在数据分析中,数据预处理是关键步骤,数据类型转换和标准化能显著提升数据质量和分析效率。Pandas提供了强大的工具来处理这些问题。本教程通过三个实战案例,帮助新手掌握这些技能。
案例1:批量转换数据类型,解决运算错误
问题描述
在数据处理时,我们常遇到数据类型不匹配导致的运算错误,比如字符串格式的数字无法直接进行数学计算。
解决方案
使用Pandas的astype()方法或pd.to_numeric()函数批量转换数据类型。
代码示例
假设我们有一个DataFrame df 包含以下列:
price:字符串格式的价格(如 "100.5")quantity:整数字符串(如 "10")
import pandas as pd
# 创建示例DataFrame
df = pd.DataFrame({
'product': ['A', 'B', 'C'],
'price': ['100.5', '200.0', '150.3'],
'quantity': ['10', '20', '15']
})
print("原始数据:")
print(df.dtypes) # 查看数据类型
# 批量转换数据类型
df['price'] = pd.to_numeric(df['price']) # 转换为浮点数
df['quantity'] = df['quantity'].astype(int) # 转换为整数
print("\n转换后数据:")
print(df.dtypes)
# 现在可以进行计算
df['total'] = df['price'] * df['quantity']
print("\n计算结果:")
print(df)
解释
pd.to_numeric()自动处理错误值,可以设置errors='coerce'将无效值转换为NaN。astype()更直接,但可能抛出错误,需确保数据干净。- 转换后,避免运算错误,如之前尝试计算会失败。
案例2:清洗字符串数据,提取有效信息
问题描述
数据中的字符串常包含多余空格、特殊字符或不一致格式,需要清洗以提取有用部分。
解决方案
使用Pandas的字符串方法,如str.strip(), str.replace(), str.extract()等。
代码示例
假设df有一列phone,包含电话号码字符串(如 "(123) 456-7890"),我们想提取区号。
import pandas as pd
# 创建示例DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie'],
'phone': ['(123) 456-7890', '456-789-1234', '123.456.7890']
})
print("原始数据:")
print(df)
# 清洗字符串:去除特殊字符
df['phone_clean'] = df['phone'].str.replace(r'[\s\-\(\)\.]', '', regex=True)
print("\n清洗后电话:")
print(df[['name', 'phone_clean']])
# 提取区号:假设区号是前3位
# 使用正则表达式提取数字模式
df['area_code'] = df['phone'].str.extract(r'(\d{3})') # 提取第一个3位数字作为区号
print("\n提取区号:")
print(df[['name', 'area_code']])
解释
str.replace()使用正则表达式去除空格、破折号等,使字符串统一。str.extract()基于正则提取模式,这里提取区号(如果有)。- 正则表达式
r'[\s\-\(\)\.]'匹配空格、-、(、)、和.,替换为空字符串。
案例3:对数值型数据进行标准化,适配后续建模
问题描述
在机器学习中,不同特征可能有不同量纲,标准化(如归一化)可以提高模型性能,避免某些特征主导。
解决方案
使用Min-Max标准化或Z-score标准化。这里用Pandas结合简单计算展示Min-Max标准化。
代码示例
假设df有一列age和income,我们需要标准化这些数值。
import pandas as pd
# 创建示例DataFrame
df = pd.DataFrame({
'age': [25, 30, 35, 40],
'income': [50000, 60000, 80000, 100000]
})
print("原始数据:")
print(df)
# Min-Max标准化:将数据缩放到[0,1]范围
def min_max_standardize(series):
return (series - series.min()) / (series.max() - series.min())
df['age_standardized'] = min_max_standardize(df['age'])
df['income_standardized'] = min_max_standardize(df['income'])
print("\n标准化后数据:")
print(df)
# 也可以使用sklearn库(需要安装:pip install scikit-learn)
# from sklearn.preprocessing import MinMaxScaler
# scaler = MinMaxScaler()
# df[['age_standardized', 'income_standardized']] = scaler.fit_transform(df[['age', 'income']])
解释
- Min-Max标准化公式:
(x - min) / (max - min),将数据映射到0-1区间。 - 标准化后,不同特征具有可比性,适合聚类或回归模型。
- 建议使用
sklearn进行复杂标准化,但Pandas足够基础操作。
总结
本教程通过三个实战案例,演示了Pandas中数据类型转换和标准化的应用:
- 批量转换数据类型:解决运算错误,确保数据正确性。
- 清洗字符串数据:提取有效信息,提高数据质量。
- 数值型数据标准化:适配机器学习建模,提升模型性能。
实践这些技巧能帮助您在数据分析项目中高效处理数据。尝试修改代码以适应您的数据场景,并深入学习正则表达式和机器学习预处理库。
开发工具推荐