如何在 Pandas 中进行数据预处理?
在 Pandas 中进行数据预处理是数据分析和机器学习项目中的重要步骤。数据预处理包括数据清洗、特征工程、数据转换等多个方面。
在 Pandas 中进行数据预处理是数据分析和机器学习项目中的重要步骤。数据预处理包括数据清洗、特征工程、数据转换等多个方面。
1. 导入必要的库
import pandas as pd
import numpy as np
2. 读取数据
假设你有一个 CSV 文件 data.csv,其中包含一些特征和目标变量。
# 读取数据
df = pd.read_csv('data.csv')
print(df.head())
3. 数据探索
了解数据的基本信息,包括缺失值、数据类型等。
# 查看基本信息
print(df.info())
# 查看描述性统计信息
print(df.describe())
# 检查缺失值
print(df.isnull().sum())
4. 处理缺失值
缺失值可以通过删除、填充或插值来处理。
删除含有缺失值的行或列
# 删除含有缺失值的行
df = df.dropna()
# 删除含有缺失值的列
df = df.dropna(axis=1)
填充缺失值
# 用均值填充数值列的缺失值
df['Age'] = df['Age'].fillna(df['Age'].mean())
# 用众数填充分类列的缺失值
df['Gender'] = df['Gender'].fillna(df['Gender'].mode()[0])
# 用特定值填充
df['Income'] = df['Income'].fillna(0)
# 使用前一个值填充
df['Salary'] = df['Salary'].fillna(method='ffill')
# 使用后一个值填充
df['Salary'] = df['Salary'].fillna(method='bfill')
5. 处理异常值
异常值可以使用条件筛选或统计方法(如 Z-score 或 IQR)来处理。
条件筛选
# 移除年龄大于100岁的记录
df = df[df['Age'] <= 100]
使用 Z-score 方法
from scipy import stats
# 计算 Z-score
z_scores = np.abs(stats.zscore(df.select_dtypes(include=[np.number])))
# 移除 Z-score 大于 3 的记录
df = df[(z_scores < 3).all(axis=1)]
使用 IQR 方法
Q1 = df.quantile(0.25)
Q3 = df.quantile(0.75)
IQR = Q3 - Q1
# 移除 IQR 范围外的记录
df = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]
6. 数据类型转换
确保每个列的数据类型正确。
# 将字符串转换为日期
df['Date'] = pd.to_datetime(df['Date'])
# 将对象类型转换为数值类型
df['Age'] = pd.to_numeric(df['Age'], errors='coerce')
# 将数值类型转换为类别类型
df['Category'] = df['Category'].astype('category')
7. 特征工程
创建新的特征或转换现有特征。
创建新特征
# 创建年龄组
df['AgeGroup'] = pd.cut(df['Age'], bins=[0, 18, 35, 50, 65, 100], labels=['Child', 'Young', 'Adult', 'Middle Age', 'Senior'])
# 创建年份、月份、日
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Day'] = df['Date'].dt.day
字符串处理
# 提取名字中的首字母
df['FirstNameInitial'] = df['Name'].str[0]
# 提取邮箱域名
df['EmailDomain'] = df['Email'].str.split('@').str[1]
8. 编码分类变量
将分类变量转换为数值形式,以便用于机器学习模型。
独热编码
# 使用 Pandas 进行独热编码
df = pd.get_dummies(df, columns=['Gender', 'Education'])
# 或者使用 Scikit-learn
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoded_features = encoder.fit_transform(df[['Gender', 'Education']])
encoded_df = pd.DataFrame(encoded_features, columns=encoder.get_feature_names_out(['Gender', 'Education']))
df = pd.concat([df, encoded_df], axis=1).drop(columns=['Gender', 'Education'])
标签编码
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
df['Gender'] = label_encoder.fit_transform(df['Gender'])
9. 特征缩放
对数值特征进行标准化或归一化。
标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['Age', 'Income']] = scaler.fit_transform(df[['Age', 'Income']])
归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['Age', 'Income']] = scaler.fit_transform(df[['Age', 'Income']])
10. 分割数据集
将数据集分为训练集和测试集。
from sklearn.model_selection import train_test_split
# 定义特征和目标变量
X = df.drop(columns=['Target'])
y = df['Target']
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
总结
通过上述步骤,你可以使用 Pandas 进行全面的数据预处理,包括数据清洗、特征工程、数据转换等。这些步骤有助于提高数据质量,并使数据更适合用于机器学习模型。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)