Преобразование числовых значений в категориальные в Pandas

#python #pandas #dataframe #mapping

#python #pandas #фрейм данных #отображение

Вопрос:

Я пытаюсь преобразовать все мои значения для определенного столбца из числовых в категориальные.

В настоящее время мой столбец содержит 2 значения, 0 и 1, и я хотел бы изменить его так, чтобы 0 стало строковым значением ‘TypeA’, а 1 стало строковым значением ‘TypeB’

Я пытался сопоставить мои столбцы таким образом, но это не сработало:

 test['target'] = test['target'].map(str)
type_mapping2 = {0 : 'TypeA', 1 : 'TypeB'}
test = test.applymap(lambda s: type_mapping2.get(s) if s in type_mapping else s)
test.head()
 

Целевой столбец по-прежнему выглядит следующим образом:

 test['target'].describe
<bound method NDFrame.describe of 0       1
1       1
2       1
3       1
4       0
5       1
 

Когда я хотел бы выглядеть так:

 <bound method NDFrame.describe of 0       1
1       TypeB
2       TypeB    
3       TypeB
4       TypeA
5       TypeB
 

Ответ №1:

Использование Series.map :

Рассмотрим df :

 In [532]: df
Out[532]: 
   col
0    1
1    1
2    1
3    0
4    1

In [533]: type_mapping2 = {0 : 'TypeA', 1 : 'TypeB'}

In [535]: df['col'] = df['col'].map(type_mapping2)

In [536]: df
Out[536]: 
     col
0  TypeB
1  TypeB
2  TypeB
3  TypeA
4  TypeB
 

Комментарии:

1. @PatrickWhelan Пожалуйста, дайте мне знать, сработал ли ответ?

Ответ №2:

Если вы хотите увидеть карту в новом столбце, вот еще один способ попробовать —

 >>> df
   col
0    1
1    1
2    1
3    0
4    1
>>> type_map = {0: 'TypeA', 1: 'TypeB'}
>>> df['type_map'] = df['col'].map(type_map) # new col to be named 'type_map'
>>> df
   col type_map
0    1    TypeB
1    1    TypeB
2    1    TypeB
3    0    TypeA
4    1    TypeB