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~

物联沃分享整理
物联沃-IOTWORD物联网 » Python编程打卡之旅第5天实战攻略

发表回复