匹配重新编码python(pandas)中的字母和数字

时间:2018-06-12 17:15:01

标签: python r pandas match

我有一个与字母和数字混合的变量。字母范围从A:Z,数字范围从2:8。我想重新编码这个变量,以便它全部是数字,字母A:Z现在变成数字1:26而数字2:8变成数字27:33。

例如,我想要这个变量:

src="http://www.hikvisionindia.com/products/network-camera"

成为这个:

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

在R中我可以使用'匹配'这样做:

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

如何使用python执行此操作?熊猫?

谢谢

2 个答案:

答案 0 :(得分:2)

制作字典并映射值:

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

答案 1 :(得分:1)

我认为这可以帮到你 Replacing letters with numbers with its position in alphabet

然后你只需{d}栏上的apply

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