Вы создаете LabelEncoder
, но вы получаете cols
, а не labelencoder_first_browser
. И вы не используете столбец с данными в этом кодере.
В примере я использую список с именами столбцов. В цикле for я создаю LabelEncoder, сохраняю его в словаре, используя имя столбца, и сразу же использую его с данными из этого столбца и создаю новый столбец с закодированными данными. Позже я могу использовать кодировщики из словаря для кодирования результатов обратно к исходным значениям.
from sklearn.preprocessing import LabelEncoder
import pandas as pd
df = pd.DataFrame({
'first_browser': ['Firefox', 'Chrome', 'Opera'],
'gender': ['Male', 'Female', 'Male'],
})
all_labelencoders = {}
cols = ['first_browser', 'gender'] # strings with names
for name in cols:
labelencoder = LabelEncoder()
all_labelencoders[name] = labelencoder
labelencoder.fit( df[name] )
df['labelencoder_' + name] = labelencoder.transform( df[name] )
print(all_labelencoders['first_browser'])
print(all_labelencoders['gender'])
#for name in cols:
# print(name, all_labelencoders[name])
print(df)
# inverse data
for name in cols:
encoder = all_labelencoders[name]
data = encoder.inverse_transform(df['labelencoder_' + name])
print(data)