我有一个数据框
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)
两个问题?
是否可以在循环中执行OneHotEncoder而不是一列一列?
不是使用i值给出_1,_2,_3,而是可以给出Color_apple,Color_lemon和Color_banana和Fruit_apple,Fruit_lemon,Fruit_banana以使命名有意义吗?