python - 用 sklearn 解码 pandas 数据帧

标签 python dataframe 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')

最佳答案

列与列之间的数据类型不同,因此将 applyfit_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_transforminverse_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

关于python - 用 sklearn 解码 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55056786/

相关文章:

python - 根据行条件替换 nan 值

python - SKlearn 随机森林输入错误

python - 具有大量零值作为缺失值的数据集。我应该怎么办?

python - 在 Linux 上安装 Azure Python api : importError: No module named storage. blob

python - MySQL 连接器/Python : How to use the start_transaction() method?

python - wpa_supplicant - 如何切换到不同的网络?

python - 如何循环遍历 API key 以在最终数据帧的单独行中获取它们的输出?

r - 对于数据帧行的直方图,“x”必须是数字

python - 将多重处理应用于 pandas 数据框中独特条目类别的最有效方法是什么?

python - 如何将 StandardScaler() 转换转换回数据框?