在 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%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

Logo

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

更多推荐