在数据科学项目中,约60%的时间都花费在数据清洗和预处理阶段。原始数据往往存在缺失值、异常值、不一致格式等问题,就像未加工的矿石需要经过多道工序才能变成有用材料。本文将系统介绍如何用Python两大核心库——NumPy和Pandas完成这些"数据精炼"工作。
import numpy as np
# 创建3×3随机矩阵
data = np.random.rand(3,3)
NumPy的ndarray对象支持矢量化运算,比Python列表快50倍以上。特殊数组创建方法:
np.zeros()
创建全零数组
np.arange()
生成等差序列
np.linspace()
等分区间
# 条件筛选
mask = arr > 0.5
filtered = arr[mask]
# 轴向计算
np.mean(arr, axis=1) # 行方向均值
Series:带标签的一维数组
s = pd.Series([1,3,5], index=['a','b','c'])
DataFrame:二维表格型数据结构
df = pd.DataFrame({
'A': [1,2,None],
'B': ['x', None, 'z']
})
缺失值处理
df.fillna(method='ffill') # 前向填充
df.interpolate() # 插值填充
异常值检测
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
df[~((df < (Q1-1.5*IQR)) | (df > (Q3+1.5*IQR))).any(axis=1)]
数据转换
# 独热编码
pd.get_dummies(df['category'])
# 分箱处理
pd.cut(df['age'], bins=[0,18,35,60,100])
数据合并
pd.merge(df1, df2, on='key') # SQL风格连接
pd.concat([s1, s2], axis=1) # 轴向拼接
用户年龄存在负数
订单日期格式不统一
30%的邮政编码缺失
# 步骤1:读取数据
raw = pd.read_csv('ecommerce.csv', parse_dates=['order_date'])
# 步骤2:年龄修正
raw['age'] = raw['age'].apply(lambda x: x if x>0 else np.nan)
# 步骤3:日期标准化
raw['order_date'] = pd.to_datetime(raw['order_date'])
# 步骤4:邮编填充
zip_mode = raw['zipcode'].mode()[0]
raw['zipcode'].fillna(zip_mode, inplace=True)
使用eval()
进行链式运算加速
大数据集优先使用dtype
指定数据类型
避免循环,尽量使用apply()
或向量化操作
掌握这些技术后,您将能够: ✓ 高效清洗百万级数据集 ✓ 自动识别数据质量问题 ✓ 构建可复用的数据处理管道 ✓ 为机器学习准备好高质量数据
建议下一步学习sklearn的预处理模块,构建完整的数据分析工作流。