用sklearn解码pandas数据帧

我有一个包含许多列的数据框。其中一些是字符串,另一些是整数。我使用此代码对我的数据框进行编码:


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')



收到一只叮咚
浏览 288回答 1
1回答

蝴蝶刀刀

数据类型因列而异,因此在这里使用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  B0  1  p1  1  q2  2  o3  3  pdf = df.apply(le.fit_transform)df   A  B0  0  11  0  22  1  03  2  1   # Looks finedf.apply(le.inverse_transform)   A  B0  o  p1  o  q2  p  o3  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  B0  0  11  0  22  1  03  2  1for col in df.columns:    le = le.fit(df[col])    df_decoded[col] = le.inverse_transform(df_encoded[col])df_decoded   A  B0  1  p1  1  q2  2  o3  3  p   # Yeay
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python