【发布时间】:2020-02-13 13:29:57
【问题描述】:
我想知道在对数据集执行数据预处理后如何跟踪数据集的原始列?
在下面的代码中df_columns 会告诉我df_array 中的0 列是A,1 列是B 等等...
但是,当我对分类列 B 进行编码时,df_columns 对于跟踪 df_dummies 不再有效
import pandas as pd
import numpy as np
animal = ['dog','cat','horse']
df = pd.DataFrame({'A': np.random.rand(9),
'B': [animal[np.random.randint(3)] for i in range(9)],
'C': np.random.rand(9),
'D': np.random.rand(9)})
df_array = df.values
df_columns = df.columns
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([('encoder', OneHotEncoder(), [1])], remainder='passthrough')
df_dummies = np.array(ct.fit_transform(df_array), dtype=np.float)
解决方案应该与分类列的位置无关......无论是A、B、C 还是D。我可以完成繁重的工作并不断更新df_columns 字典...但它不会优雅或“pythonic”
此外...解决方案将如何跟踪分类的含义? {0,0,1} 是猫,{0,1,0} 是狗等等?
PS - 我知道虚拟变量陷阱,当我实际使用它来训练我的模型时,我会使用 df_dummies[:,1:]。
【问题讨论】:
标签: python machine-learning scikit-learn categorical-data one-hot-encoding