数据探索
了解数据的基本信息,包括缺失值、数据类型等。
# 查看基本信息
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)
评论区