Столбцы символов фрейма данных pandas в целое число

У меня есть фрейм данных, как показано ниже:

+--------------+--------------+----+-----+-------+
|      x1      |      x2      | km | gmm | class |
+--------------+--------------+----+-----+-------+
|  180.9863129 | -0.266379416 | 24 |  19 | T     |
|  52.20132828 |  28.93587875 | 16 |  14 | I     |
| -17.17127419 |  29.97013283 | 17 |  16 | D     |
|  37.28710938 | -69.96691132 |  3 |   6 | N     |
| -132.2395782 |  27.02541733 | 15 |  18 | G     |
| -12.52811623 | -87.90951538 | 22 |   5 | S     |

Классы в основном представляют собой алфавиты (от A до Z). Однако мне нужен результат вроде A = 1, B = 2 ... Z = 26.

Теперь, для обычного списка Python, я могу преобразовать их как ord(c.lower()) - ord('a')) % 9) + 1

Однако как это сделать в фреймворке данных

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
232
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Опция 1
Предполагая, что в вашем столбце Только есть одиночные символы в верхнем регистре, вы можете выполнить небольшую арифметику на view:

df['class'] = df['class'].values.astype('<U1').view(np.uint32) - 64

df
           x1         x2  km  gmm  class
0  180.986313  -0.266379  24   19     20
1   52.201328  28.935879  16   14      9
2  -17.171274  29.970133  17   16      4
3   37.287109 -69.966911   3    6     14
4 -132.239578  27.025417  15   18      7
5  -12.528116 -87.909515  22    5     19

Это самый быстрый метод, который я могу придумать для для больших данных.

Если есть вероятность, что у вас нестабильные данные, вы можете рассмотреть такой шаг предварительной обработки:

df['class'] = df['class'].str.upper().str[0]

Вариант 2
ord

df['class'] = [ord(c) - 64 for c in df['class']]

Или же,

df['class'] = df['class'].apply(ord) - 64

df
           x1         x2  km  gmm  class
0  180.986313  -0.266379  24   19     20
1   52.201328  28.935879  16   14      9
2  -17.171274  29.970133  17   16      4
3   37.287109 -69.966911   3    6     14
4 -132.239578  27.025417  15   18      7
5  -12.528116 -87.909515  22    5     19

Здесь используется string с map

import string
df['class'].map(dict(zip(list(string.ascii_uppercase),list(range(1,27)))))
Out[1155]: 
0    20
1     9
2     4
3    14
4     7
5    19
Name: class, dtype: int64

Другие вопросы по теме