Pandas 我想使用ColumnTransformer预处理数据集

Pandas 我想使用ColumnTransformer预处理数据集,pandas,dataframe,scikit-learn,Pandas,Dataframe,Scikit Learn,我有一个数据帧df 我想删除df中包含40%空值的任何列 我想使用SimpleImputer和最常用的策略来处理 在列中使用剩余的空值 我想将df的非数字列转换为数字(可能使用OrdinalEncoder) 最后,我想对df 我相信我可以使用ColumnTransformer将所有这些东西封装成一个东西。但我愿意了解你认为解决这个问题的最佳策略。你能告诉我怎么做吗 背景信息:做我的第一个数据科学项目;业余爱好者 编辑1 以下是我的数据帧的“示例”: df = pd.DataFrame(

我有一个数据帧
df

  • 我想删除
    df
    中包含40%空值的任何列
  • 我想使用
    SimpleImputer
    和最常用的
    策略来处理
    在列中使用剩余的空值
  • 我想将
    df
    的非数字列转换为数字(可能使用
    OrdinalEncoder
  • 最后,我想对
    df
我相信我可以使用
ColumnTransformer
将所有这些东西封装成一个东西。但我愿意了解你认为解决这个问题的最佳策略。你能告诉我怎么做吗

背景信息:做我的第一个数据科学项目;业余爱好者

编辑1 以下是我的数据帧的“示例”:

df = pd.DataFrame(
    {
    'respondent_id': [0,1],
    'h1n1_concern': [1,3],
    'h1n1_knowledge': [0,2],
    'behavioral_antiviral_meds': [0, 0],
    'behavioral_avoidance': [0, 1],
    'behavioral_face_mask': [0, 0],
    'behavioral_wash_hands': [0, 1],
    'behavioral_large_gatherings': [0, 0],
    'behavioral_outside_home': [1, 1],
    'behavioral_touch_face': [1, 1],
    'doctor_recc_h1n1': [0,0],
    'doctor_recc_seasonal': [0,0],
    'chronic_med_condition': [0,0],
    'child_under_6_months': [0,0],
    'health_worker': [0,0],
    'health_insurance': [1,1],
    'opinion_h1n1_vacc_effective': [3,5],
    'opinion_h1n1_risk': [1,4],
    'opinion_h1n1_sick_from_vacc': [2,4],
    'opinion_seas_vacc_effective': [2,4],
    'opinion_seas_risk': [1,2],
    'opinion_seas_sick_from_vacc': [2,4],
    'age_group': ['55-64 Years', '35-44 Years'],
    'education': ['< 12 Years', '12 Years'],
    'race': ['White', 'White'],
    'sex': ['Female', 'Male'],
    'income_poverty': ['Below Poverty', 'Below Poverty'],
    'marital_status': ['Not Married', 'Not Married'],
    'rent_or_own': ['Own', 'Rent'],
    'employment_status': ['Not in Labor Force', 'Employed'],
    'hhs_geo_region': ['oxchjgsf', 'bhuqouqj'],
    'census_msa': ['Non-MSA', 'MSA, Not Principle City'],
    'household_adults': [0, 0],
    'household_children': [0, 0],
    'employment_industry': [np.nan, 'pxcmvdjn'],
    'employment_occupation': [np.nan, 'xgwztkwe']
}
) 
以下是我想要进行热编码的列(因为它们包含标称数据):


要删除空值,可以执行以下操作

df = df.loc[:, df.isnull().mean() < .4]
df=df.loc[:,df.isnull().mean()<.4]
由于您希望至少对某些列应用多步骤预处理(例如插补,然后是一个热编码),因此可能需要为每组列提供一个顺序管道。 注意:列转换器对不同的列并行执行变换,而不是顺序执行变换。因此,您需要在预处理的最后阶段将顺序管道馈送到列转换器中

有关示例,请参见下面链接中的公认答案


您能分享一个您正在使用的数据框示例吗?先生,我把数据框作为CSV文件。如何在GitHub上共享示例?您可以从csv复制前几行,并将它们粘贴到代码块中。它应该保持格式化。是的,先生,我有这些是我的数据帧的前两行。你可以复制粘贴它没有任何张力,我已经确保它的工作。
columns_to_be_one_hot_encoded = [
    'race', 'employment_status', 
    'hhs_geo_region', 'census_msa', 'employment_industry', 'employment_occupation'
]
df = df.loc[:, df.isnull().mean() < .4]