简介
本全面教程将探讨如何使用Python中的pandas进行数据预处理技术,为开发者和数据科学家提供清理、转换和准备数据集以进行高级分析的基本技能。通过掌握pandas强大的数据处理能力,你将学习如何有效地应对现实世界中的数据挑战,并改进你的数据科学工作流程。
本全面教程将探讨如何使用Python中的pandas进行数据预处理技术,为开发者和数据科学家提供清理、转换和准备数据集以进行高级分析的基本技能。通过掌握pandas强大的数据处理能力,你将学习如何有效地应对现实世界中的数据挑战,并改进你的数据科学工作流程。
Pandas 是一个强大的用于 Python 的开源数据处理库。它为数据分析提供了高性能、易于使用的数据结构和工具,使其成为数据科学家和分析师必不可少的库。
Series 是一个一维带标签的数组,可以容纳任何数据类型。
import pandas as pd
## 创建一个 Series
s = pd.Series([1, 3, 5, 7, 9])
print(s)
DataFrame 是一个二维带标签的数据结构,其列的数据类型可能不同。
## 创建一个 DataFrame
data = {
'姓名': ['爱丽丝', '鲍勃', '查理'],
'年龄': [25, 30, 35],
'城市': ['纽约', '旧金山', '芝加哥']
}
df = pd.DataFrame(data)
print(df)
Pandas 支持从各种来源读取数据:
## 读取 CSV 文件
df_csv = pd.read_csv('data.csv')
## 读取 Excel 文件
df_excel = pd.read_excel('data.xlsx')
## 读取 JSON 文件
df_json = pd.read_json('data.json')
## 显示前几行
print(df.head())
## 显示基本信息
print(df.info())
## 获取统计摘要
print(df.describe())
特性 | 描述 |
---|---|
数据选择 | 强大的索引和选择方法 |
缺失数据处理 | 检测和处理缺失值的工具 |
分组与聚合 | 对数据进行分组并执行聚合操作 |
时间序列功能 | 全面的时间序列支持 |
你可以使用 pip 安装 Pandas:
pip install pandas
Pandas 适用于:
在 LabEx,我们推荐将 Pandas 作为数据科学和分析任务的基础工具。
Pandas 通过向量化操作提供高效的数据处理,使其比传统的 Python 循环快得多。
数据预处理是数据分析中的关键步骤,它涉及将原始数据转换为适合分析和机器学习的干净、一致的格式。
import pandas as pd
import numpy as np
## 创建示例 DataFrame
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': [5, np.nan, np.nan, 8]
})
## 检查缺失值
print(df.isnull())
print(df.isnull().sum())
策略 | 方法 | 示例 |
---|---|---|
删除 | 移除包含缺失数据的行/列 | df.dropna() |
填充 | 替换缺失值 | df.fillna(0) |
插值 | 估计缺失值 | df.interpolate() |
## 独热编码
df_encoded = pd.get_dummies(df, columns=['category_column'])
## 标签编码
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['encoded_column'] = le.fit_transform(df['category_column'])
from sklearn.preprocessing import StandardScaler, MinMaxScaler
## 标准化
scaler = StandardScaler()
df['scaled_column'] = scaler.fit_transform(df[['numeric_column']])
## 归一化
minmax_scaler = MinMaxScaler()
df['normalized_column'] = minmax_scaler.fit_transform(df[['numeric_column']])
## 使用 IQR 方法检测异常值
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1
下限 = Q1 - 1.5 * IQR
上限 = Q3 + 1.5 * IQR
## 移除或限制异常值
df_cleaned = df[(df['column'] >= 下限) & (df['column'] <= 上限)]
## 转换为日期时间
df['date_column'] = pd.to_datetime(df['date_column'])
## 从日期时间中提取特征
df['year'] = df['date_column'].dt.year
df['month'] = df['date_column'].dt.month
df['day'] = df['date_column'].dt.day
在 LabEx,我们强调全面数据预处理对于确保高质量分析和机器学习模型的重要性。
挑战 | 解决方案 |
---|---|
数据不一致 | 标准化格式 |
分布偏斜 | 应用转换 |
高基数 | 使用降维 |
数据不平衡 | 重采样技术 |
import pandas as pd
## 示例 DataFrame
df = pd.DataFrame({
'类别': ['A', 'B', 'A', 'B', 'A'],
'值': [10, 20, 30, 40, 50]
})
## 分组并聚合
分组 = df.groupby('类别').agg({
'值': ['mean','sum', 'count']
})
## 多级分组
多级分组 = df.groupby(['类别', pd.Grouper(key='日期', freq='M')])
## 自定义聚合函数
def 自定义聚合(x):
return x.max() - x.min()
df.groupby('类别').agg({'值': 自定义聚合})
## 内连接
结果内连接 = pd.merge(df1, df2, on='键', how='inner')
## 左连接
结果左连接 = pd.merge(df1, df2, on='键', how='left')
## 外连接
结果外连接 = pd.merge(df1, df2, on='键', how='outer')
## 透视表
透视表 = df.pivot_table(
values='值',
index='类别',
columns='子类别',
aggfunc='mean'
)
## 逆透视(unpivot)
逆透视_df = df.melt(
id_vars=['类别'],
value_vars=['值1', '值2']
)
## 滚动窗口计算
df['移动平均值'] = df['值'].rolling(window=3).mean()
## 扩展窗口
df['累积和'] = df['值'].expanding().sum()
## 多条件过滤
过滤后的_df = df[
(df['值'] > 10) &
(df['类别'].isin(['A', 'B']))
]
## 查询方法
过滤后的_df = df.query('值 > 10 and 类别 in ["A", "B"]')
技术 | 使用场景 | 性能 | 复杂度 |
---|---|---|---|
Groupby | 聚合 | 中等 | 低 |
Apply | 自定义操作 | 低 | 高 |
向量化 | 并行处理 | 高 | 中等 |
## 重采样时间序列
ts_重采样 = df.resample('M').mean()
## 移位和滞后
df['滞后值'] = df['值'].shift(1)
## 创建交互特征
df['交互'] = df['特征1'] * df['特征2']
## 对数值特征进行分箱
df['年龄组'] = pd.cut(
df['年龄'],
bins=[0, 18, 35, 50, 100],
labels=['年轻', '成年', '中年', '老年']
)
在 LabEx,我们建议掌握这些高级操作技术,以充分发挥使用 Pandas 进行数据分析的潜力。
在本教程中,我们介绍了Python中基本的pandas数据预处理技术,展示了如何有效地清理、转换和处理数据集。通过掌握这些核心技能,数据专业人员可以简化他们的数据分析流程,应对复杂的数据挑战,并为机器学习和统计建模准备高质量的数据集。