Python编程打卡之旅第5天实战攻略
题目:
在py文件中 一次性处理data数据中所有的连续变量和离散变量
1.读取data数据
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
data = pd.read_csv('day5\data.csv')
2.对离散变量进行one-hot编码
# 识别离散变量和连续变量
discrete_cols = data.select_dtypes(include='object').columns
continuous_cols = data.select_dtypes(include=['int64', 'float64']).columns
# 离散变量独热编码
encoder = OneHotEncoder(sparse_output=False, drop='first') # 不是稀疏矩阵,且删除第一个特征
encoded_data = encoder.fit_transform(data[discrete_cols])
encoded_df = pd.DataFrame(encoded_data,
columns=encoder.get_feature_names_out(discrete_cols),
index=data.index) # 保证能与连续变量合并
3.对独热编码后的变量转化为int类型
encoded_df = encoded_df.astype(int)
# 合并
processed_data = pd.concat([data[continuous_cols], encoded_df], axis=1)
4.对所有缺失值进行填充
processed_data = processed_data.fillna({
**{col: processed_data[col].median() for col in continuous_cols}, # 连续变量用中位数填充,传入一个字典,键为列名,值为该列的中位数
**{col: processed_data[col].mode()[0] for col in encoded_df.columns} # 离散变量用众数填充,传入一个字典,键为列名,值为该列的众数
})
完整代码:
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
data = pd.read_csv('day5\data.csv')
# 识别离散变量和连续变量
discrete_cols = data.select_dtypes(include='object').columns
continuous_cols = data.select_dtypes(include=['int64', 'float64']).columns
# 离散变量独热编码
encoder = OneHotEncoder(sparse_output=False, drop='first') # 不是稀疏矩阵,且删除第一个特征
encoded_data = encoder.fit_transform(data[discrete_cols])
encoded_df = pd.DataFrame(encoded_data,
columns=encoder.get_feature_names_out(discrete_cols),
index=data.index) # 保证能与连续变量合并
encoded_df = encoded_df.astype(int)
# 合并
processed_data = pd.concat([data[continuous_cols], encoded_df], axis=1)
# 处理缺失值
processed_data = processed_data.fillna({
**{col: processed_data[col].median() for col in continuous_cols}, # 连续变量用中位数填充,传入一个字典,键为列名,值为该列的中位数
**{col: processed_data[col].mode()[0] for col in encoded_df.columns} # 离散变量用众数填充,传入一个字典,键为列名,值为该列的众数
})
input() # 暂停,方便调试时查看填充缺失值后的数据
@浙大疏锦行
作者:Takina~