在Python的for循环中使用pd.get_dummies创建虚拟变量

我想使用 pd.get_dummies()将特定类别变量转换为虚拟变量,以用于测试和训练数据,因此,我使用了for循环,而不是分别对它们进行处理。但是,以下代码不起作用,并且 .head()返回相同的数据集。

combine = [train_data,test_data]
for dataset in combine:
    dummy_col = pd.get_dummies(dataset['targeted_sex'])
    dataset = pd.concat([dataset,dummy_col],axis = 1)
    dataset.drop('targeted_sex',axis = 1,inplace = True)

train_data.head() # does not change

即使我使用了遍历这样的索引的迭代器,也仍然无法使用。

for i in range(len(combine)):

我可以寻求帮助吗?另外,Pandas get_dummies()不提供就地选项。

l2912503 回答:在Python的for循环中使用pd.get_dummies创建虚拟变量

出于参考目的,我将使用字典:

创建训练和测试词典:

combine={'train_data':train_data,'test_data':test_data}

使用此代码使用dict理解:

new_combine={k:pd.concat([dataset,pd.get_dummies(dataset['targeted_sex'])],axis = 1)
                            .drop('targeted_sex',1) for k,dataset in combine.items()}

现在通过参考以下按键打印测试并进行训练:

print(new_combine['train_data']) #same for test
,

您需要打印dataset.head()而不是train_data.head()

您可以使用此功能:

df:数据框 todummy_list:将是虚拟变量的列名列表

def dummy_df(df,todummy_list):
    for x in todummy_list:
        dummies = pd.get_dummies(df[x],prefix=x,dummy_na=False)
        df = df.drop(x,1)
        df = pd.concat([df,dummies],axis=1)
    return df
本文链接:https://www.f2er.com/2940812.html

大家都在问