为了账号安全,请及时绑定邮箱和手机立即绑定

用sklearn解码pandas数据帧

用sklearn解码pandas数据帧

收到一只叮咚 2021-11-30 10:26:26
我有一个包含许多列的数据框。其中一些是字符串,另一些是整数。我使用此代码对我的数据框进行编码:le = LabelEncoder()for col in df.columns:    df_encoded[col] = df.apply(le.fit_transform)有效!但是当我想用这个代码解码它时:for col in df.columns:    df_decoded[col] = df_encoded.apply(le.inverse_transform)我收到此错误:ValueError: ('The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()', 'occurred at index MYCOLUMNNAME')
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

数据类型因列而异,因此在这里使用applywithfit_transform不起作用。它似乎可以正常工作,但在LabelEncoder操作结束时将适合最右边的列,因此当您尝试应用 时inverse_transform,LabelEncoder 会将其他列中的所有元素替换为它在最右边的列。例如:


df = pd.DataFrame([{'A': 1, 'B': 'p'}, {'A': 1, 'B': 'q'},  {'A': 2, 'B': 'o'},  {'A': 3, 'B': 'p'}])

df

   A  B

0  1  p

1  1  q

2  2  o

3  3  p


df = df.apply(le.fit_transform)

df

   A  B

0  0  1

1  0  2

2  1  0

3  2  1   # Looks fine


df.apply(le.inverse_transform)

   A  B

0  o  p

1  o  q

2  p  o

3  q  p   # Whoops

即使您一一遍历列并执行fit_transformand ,您也会看到相同的结果inverse_transform。


在反转之前,您需要将编码器安装到正确的列:


le = LabelEncoder()

df_encoded = pd.DataFrame(columns=df.columns)

df_decoded = pd.DataFrame(columns=df.columns)


for col in df.columns:

    df_encoded[col] = le.fit_transform(df[col])


df_encoded

   A  B

0  0  1

1  0  2

2  1  0

3  2  1


for col in df.columns:

    le = le.fit(df[col])

    df_decoded[col] = le.inverse_transform(df_encoded[col])


df_decoded


   A  B

0  1  p

1  1  q

2  2  o

3  3  p   # Yeay


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 287 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信