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

​​​软件测试面试文档

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

在这里插入图片描述

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值