目 录CONTENT

文章目录

pandas对数据预处理方法

Administrator
2024-10-30 / 0 评论 / 0 点赞 / 20 阅读 / 0 字

数据探索

了解数据的基本信息,包括缺失值、数据类型等。

# 查看基本信息
print(df.info())
# 查看描述性统计信息
print(df.describe())
# 检查缺失值
print(df.isnull().sum())

处理缺失值

缺失值可以通过删除、填充或插值来处理。 删除含有缺失值的行或列

# 删除含有缺失值的行
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')

处理异常值

异常值可以使用条件筛选或统计方法(如 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)]

数据类型转换

确保每个列的数据类型正确。

# 将字符串转换为日期
df['Date'] = pd.to_datetime(df['Date'])
# 将对象类型转换为数值类型
df['Age'] = pd.to_numeric(df['Age'], errors='coerce')
# 将数值类型转换为类别类型
df['Category'] = df['Category'].astype('category')

特征工程

创建新的特征或转换现有特征。 创建新特征

# 创建年龄组
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]

编码分类变量

将分类变量转换为数值形式,以便用于机器学习模型。 独热编码

# 使用 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'])

特征缩放

对数值特征进行标准化或归一化。

标准化

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']])

分割数据集

将数据集分为训练集和测试集。

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)

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区