Совпадение, чтобы перекодировать буквы и цифры в питоне (панды) - PullRequest
0 голосов
/ 12 июня 2018

У меня есть переменная, которая смешана с буквами и цифрами.Буквы варьируются от A: Z, а цифры - от 2: 8.Я хочу перекодировать эту переменную так, чтобы она была все числовой с буквами A: Z, становящимися теперь числами 1:26, а числа 2: 8, становящимися числами 27:33.

Например, мне бы хотелось, чтобы эта переменная:

Var1 = c('A',2,3,8,'C','W',6,'T')

Чтобы стать такой:

Var1 = c(1,27,28,33,3,23,31,20)

В RI это можно сделать с помощью 'match' следующим образом:

Var1 = as.numeric(match(Var1, c(LETTERS, 2:8)))

Как я могу сделать это с помощью Python?Панды?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Составьте словарь и сопоставьте значения:

import string
import numpy as np

dct = dict(zip(list(string.ascii_uppercase) + list(np.arange(2, 9)), np.arange(1, 34)))
# If they are strings of numbers, not integers use:
#dct = dict(zip(list(string.ascii_uppercase) + ['2', '3', '4', '5', '6', '7', '8'], np.arange(1, 34)))

df.col_name = df.col_name.map(dct)

Пример:

import pandas as pd
df = pd.DataFrame({'col': [2, 4, 6, 3, 5, 'A', 'B', 'D', 'F', 'Z', 'X']})
df.col.map(dct)

Выходы:

0     27
1     29
2     31
3     28
4     30
5      1
6      2
7      4
8      6
9     26
10    24
Name: col, dtype: int64
0 голосов
/ 12 июня 2018

я думаю, что это может помочь вам Замена букв цифрами с положением в алфавите

тогда вам просто нужно apply на вашем столбце df

dt.Var1.apply(alphabet_position)

Вы также можете попробовать это

for i in range(len(var1)):
    if type(var1[i]) == int:
        var1[i] = var1[i] + 25
    else:
        var1[i] = ord(var1[i].lower()) - 96
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...