【问题标题】:How to decode LabelEncoder implemented column in pandas dataframe?如何解码 Pandas 数据框中的 LabelEncoder 实现的列?
【发布时间】:2021-01-20 01:35:16
【问题描述】:

我有一个dataset。我通过将分类对象转换为数字来练习特征工程,使用以下代码行:

import pandas as pd 
import numpy as np
from sklearn import preprocessing
df = pd.read_csv(r'train.csv',index_col='Id')
print(df.shape)
df.head()
colsNum = df.select_dtypes(np.number).columns
colsObj = df.columns.difference(colsNum)

df[colsNum] = df[colsNum].fillna(df[colsNum].mean()//1)
df[colsObj] = df[colsObj].fillna(df[colsObj].mode().iloc[0])

label_encoder = preprocessing.LabelEncoder() 
for col in colsObj:
    df[col] = label_encoder.fit_transform(df[col])
df.head()
for col in colsObj:
    df[col] = label_encoder.inverse_transform(df[col])
df.head()

但这里 inverse_tranform() 没有返回原始数据集。请帮帮我!

【问题讨论】:

    标签: python-3.x dataframe preprocessor sklearn-pandas label-encoding


    【解决方案1】:

    您需要每列一个编码器 - 您不能使用相同的编码器对所有列进行编码:

    import pandas as pd
    import numpy as np
    from sklearn import preprocessing
    df = pd.read_csv(r'train.csv', index_col='Id')
    print(df.shape)
    
    colsNum = df.select_dtypes(np.number).columns
    colsObj = df.columns.difference(colsNum)
    
    df[colsNum] = df[colsNum].fillna(df[colsNum].mean()//1)
    df[colsObj] = df[colsObj].fillna(df[colsObj].mode().iloc[0])
    print(df.head())
    
    encoder = {}
    
    for col in colsObj:
        encoder[col] = preprocessing.LabelEncoder()
        df[col] = encoder[col].fit_transform(df[col])
    print(df.head())
    
    for col in colsObj:
        df[col] = encoder[col].inverse_transform(df[col])
    print(df.head())
    

    您也可以查看this answer 了解更多详情。

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2018-10-19
      • 2017-04-11
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多