Pandas 中文手册

11.4 数据类型转换与标准化实战案例

Pandas数据类型转换与标准化实战案例 - 新手入门指南

Pandas 中文手册

本章节通过三个实战案例,详细讲解如何使用Pandas进行数据类型批量转换、字符串清洗和数值标准化,解决数据运算错误,提取有效信息,适配后续建模,适合数据分析新手学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

数据类型转换与标准化实战案例

引言

在数据分析中,数据预处理是关键步骤,数据类型转换和标准化能显著提升数据质量和分析效率。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有一列ageincome,我们需要标准化这些数值。

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中数据类型转换和标准化的应用:

  1. 批量转换数据类型:解决运算错误,确保数据正确性。
  2. 清洗字符串数据:提取有效信息,提高数据质量。
  3. 数值型数据标准化:适配机器学习建模,提升模型性能。

实践这些技巧能帮助您在数据分析项目中高效处理数据。尝试修改代码以适应您的数据场景,并深入学习正则表达式和机器学习预处理库。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包