【问题标题】:How can I use sklearn label encoder and apply to my dataframe directly如何使用 sklearn 标签编码器并直接应用于我的数据帧
【发布时间】:2019-03-09 05:35:27
【问题描述】:

我有一个数据框,我想直接在其上使用 LabelEncoder。

数据帧:

df.select_dtypes('object').iloc[:,1:]

  Gender  Married x_y   x_z 
0   Male    No     0     No       
1   Male    Yes    1     No         
2   Male    Yes    2     Yes        
3   Male    Yes    3+    No   
4   Male    No     1     No     

我试过这些:

le = LabelEncoder()
df.select_dtypes('object').iloc[:,1:].apply(le.fit_transform, axis=1)

TypeError: ("'

df.select_dtypes('object').iloc[:,1:].apply(LabelEncoder.fit_transform)

TypeError: ("fit_transform() 缺少 1 个必需的位置参数: 'y'", '发生在索引性别')

关于如何使用它的任何帮助。

【问题讨论】:

  • 对于初学者来说,LabelEncoder() 用于单个列、您的目标或类别标签。你在找OneHotEncoder()吗?
  • @G.Anderson 我在上面看到过很多帖子,所以你可以通过apply 函数使用它。
  • 我想直接根据类别将类别标签转换为o1
  • df.apply(LabelEncoder().fit_transform),其中df 是包含您要转换的所有列的数据框。

标签: python scikit-learn sklearn-pandas


【解决方案1】:

我能想到的最基本的方法是选择对象列,然后使用 LabelEncoder 循环遍历它们和fit_transform()

for col in df.select_dtypes(object).columns:
    df[col]=LabelEncoder().fit_transform(df[col])

【讨论】:

  • 可以通过apply函数实现吗?
【解决方案2】:

假设 df 是您想要转换的过滤数据框(例如,根据您在问题中的示例):

>>> df.apply(LabelEncoder().fit_transform)
   Gender  Married  x_y  x_z
0       0        0    0    0
1       0        1    1    0
2       0        1    2    1
3       0        1    3    0
4       0        0    1    0

为了使解码更通用,您需要跟踪标签编码器(我使用了一个以数据框列名称为键的字典)。然后,您需要适合每个人。

encoders = {col: LabelEncoder().fit(df[col]) for col in df}

encoded_df = pd.DataFrame(
    {col: encoders[col].transform(df[col]) for col in df},
    index=df.index)
>>>encoded_df
   Gender  Married  x_y  x_z
0       0        0    0    0
1       0        1    1    0
2       0        1    2    1
3       0        1    3    0
4       0        0    1    0

decoded_df = pd.DataFrame(
    {col: encoders[col].inverse_transform(encoded_df[col]) for col in encoded_df},
    index=encoded_df.index)
  Gender Married x_y  x_z
0   Male      No   0   No
1   Male     Yes   1   No
2   Male     Yes   2  Yes
3   Male     Yes  3+   No
4   Male      No   1   No

【讨论】:

  • 谢谢,这似乎可以解决问题。是否可以将它们转换回来?
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 2017-03-27
  • 2020-07-12
  • 2020-11-21
  • 2019-07-30
  • 1970-01-01
  • 2021-12-27
  • 2017-02-16
相关资源
最近更新 更多