← 返回首页
🤖

Pandas数据处理实战

📂 ai ⏱ 2 min 281 words

Pandas数据处理实战

在机器学习项目中,数据预处理占据了整个工作流的60%-80%时间。Pandas是Python中最强大的数据处理库,掌握它对于任何ML工程师来说都是必备技能。

DataFrame基础

DataFrame是Pandas的核心数据结构,可以理解为一个二维表格:

import pandas as pd
import numpy as np

# 创建DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 35, 28],
    '薪资': [8000, 12000, 15000, 9500],
    '部门': ['技术', '产品', '技术', '运营']
}
df = pd.DataFrame(data)
print(df)
print(f"形状: {df.shape}")
print(f"数据类型:\n{df.dtypes}")

数据读取

Pandas支持读取多种格式的数据:

# 读取CSV文件
df_csv = pd.read_csv('data.csv', encoding='utf-8')

# 读取Excel文件
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 读取JSON文件
df_json = pd.read_json('data.json')

# 读取数据库
import sqlite3
conn = sqlite3.connect('database.db')
df_db = pd.read_sql('SELECT * FROM users', conn)

# 读取大文件时使用分块
chunks = pd.read_csv('large_file.csv', chunksize=10000)
for chunk in chunks:
    # 处理每个块
    process(chunk)

数据清洗

真实数据往往存在缺失值、重复值和异常值:

# 检查缺失值
print(df.isnull().sum())

# 填充缺失值
df['年龄'].fillna(df['年龄'].mean(), inplace=True)
df['部门'].fillna('未知', inplace=True)

# 删除重复值
df.drop_duplicates(subset=['姓名', '部门'], inplace=True)

# 处理异常值 - 使用IQR方法
def remove_outliers(df, column):
    Q1 = df[column].quantile(0.25)
    Q3 = df[column].quantile(0.75)
    IQR = Q3 - Q1
    lower = Q1 - 1.5 * IQR
    upper = Q3 + 1.5 * IQR
    return df[(df[column] >= lower) & (df[column] <= upper)]

df = remove_outliers(df, '薪资')

数据转换

特征工程中常用的数据转换操作:

# 标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df['薪资标准化'] = scaler.fit_transform(df['薪资'](/notes/))

# 分箱处理
df['年龄段'] = pd.cut(df['年龄'], bins=[0, 25, 35, 100], labels=['青年', '中年', '老年'])

# 哑变量编码
df_encoded = pd.get_dummies(df, columns=['部门'], prefix='dept')

# 应用自定义函数
df['薪资等级'] = df['薪资'].apply(lambda x: '高' if x > 10000 else '中' if x > 8000 else '低')

# 日期处理
df['日期'] = pd.to_datetime('2024-01-01') + pd.to_timedelta(np.arange(len(df)), unit='D')
df['年'] = df['日期'].dt.year
df['月'] = df['日期'].dt.month
df['星期'] = df['日期'].dt.day_name()

数据合并

实际项目中经常需要合并多个数据源:

# 创建第二个DataFrame
df_dept = pd.DataFrame({
    '部门': ['技术', '产品', '运营'],
    '预算': [50000, 30000, 20000]
})

# merge - 类似SQL的JOIN
df_merged = pd.merge(df, df_dept, on='部门', how='left')

# concat - 纵向拼接
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
df_concat = pd.concat([df1, df2], ignore_index=True)

# groupby聚合
df_grouped = df.groupby('部门').agg({
    '薪资': ['mean', 'max', 'count'],
    '年龄': 'mean'
}).round(2)
print(df_grouped)

数据导出

# 保存处理后的数据
df.to_csv('processed_data.csv', index=False, encoding='utf-8-sig')
df.to_excel('processed_data.xlsx', index=False)

# 保存为pickle格式(保留数据类型)
df.to_pickle('processed_data.pkl')

总结

Pandas提供了完整的数据处理工具链。在ML项目中,建议遵循以下流程:读取数据 → 探索性分析 → 清洗缺失/异常值 → 特征转换 → 合并数据源 → 导出处理结果。熟练掌握这些操作,能让你的机器学习项目事半功倍。