为多个列的OneHotEncoding创建循环?

时间:2019-06-07 04:43:28

标签: python python-3.x pandas

我有一个数据框

import pandas as pd
df = pd.DataFrame([
       ['red', 'apple', 12],
       ['green', 'lemon', 20], 
       ['yellow', 'banana', 18],
])
df.columns = ['color', 'fruit', 'count']

我使用Apply函数创建Labelencoder

from sklearn.preprocessing import LabelEncoder
cat_columns = df.dtypes[df.dtypes == "object"].index 
df[cat_columns] = df[cat_columns].apply(lambda col: LabelEncoder().fit_transform(col))

然后必须分别为每一列创建OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
color = OneHotEncoder().fit_transform(df.color.values.reshape(-1,1)).toarray()
fruit = OneHotEncoder().fit_transform(df.fruit.values.reshape(-1,1)).toarray()

dfOneHot = pd.DataFrame(color, columns = ["Color_"+str(int(i)) for i in range(color.shape[1])])
df = pd.concat([df, dfOneHot], axis=1)

dfOneHot = pd.DataFrame(fruit, columns = ["Fruit_"+str(int(i)) for i in range(fruit.shape[1])])
df = pd.concat([df, dfOneHot], axis=1)

两个问题?

  1. 是否可以在循环中执行OneHotEncoder而不是一列一列?

  2. 不是使用i值给出_1,_2,_3,而是可以给出Color_apple,Color_lemon和Color_banana和Fruit_apple,Fruit_lemon,Fruit_banana以使命名有意义吗?

0 个答案:

没有答案