Кодирование одинаковых значений в разных столбцах с одинаковым целым числом в python - PullRequest
2 голосов
/ 24 февраля 2020

У меня есть фрейм данных со значениями true / false, хранящимися в строковом формате. Некоторые значения в кадре данных равны нулю.

Мне нужно закодировать эти данные так, чтобы значения TRUE / FALSE / null кодировались с одинаковым целым числом в каждом столбце.

Входные данные:

col1 col2 col3
True True False
True True True
null null True

Я использую:

le = preprocessing.LabelEncoder()
df.apply(le.fit_transform)

Вывод:

2 1 0
2 1 1
1 0 1

Но я хочу вывод как:

2 2 0
2 2 2
1 1 2

Как мне сделать это?

1 Ответ

5 голосов
/ 24 февраля 2020

Для меня работает создать один столбец DataFrame:

df = df.stack(dropna=False).to_frame().apply(le.fit_transform)[0].unstack()
print (df)
   col1  col2  col3
0     1     1     0
1     1     1     1
2     2     2     1

Другая идея заключается в использовании DataFrame.replace с 'True' вместо True, потому что:

У меня есть фрейм данных со значениями true / false, хранящимися в строковом формате.

Если null отсутствуют значения:

df = df.replace({'True':2, 'False':1, np.nan:0})

Если null являются строками null:

df = df.replace({'True':2, 'False':1, 'null':0})

print (df)
   col1  col2  col3
0     2     2     1
1     2     2     2
2     0     0     2
...