匹配以在python中重新编码字母和数字(熊猫)

匹配以在python中重新编码字母和数字(熊猫),python,r,pandas,match,Python,R,Pandas,Match,我有一个混合了字母和数字的变量。字母范围为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) 在R中,我可以使用“匹配”这样做: Var1 = as.numeric(match(Var1, c(LETTERS, 2:8))) 如何使用python实现这一点?

我有一个混合了字母和数字的变量。字母范围为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)
在R中,我可以使用“匹配”这样做:

Var1 = as.numeric(match(Var1, c(LETTERS, 2:8)))
如何使用python实现这一点?熊猫


谢谢

我想这会对你有所帮助

然后您只需要在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

我想这对你有帮助

然后您只需要在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

制作字典并映射值:

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

制作字典并映射值:

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

你能和我们分享你的输入数据吗?@nimrodz我对我的问题做了一些编辑并提供了一个示例更新了我的答案你能和我们分享你的输入数据吗?@nimrodz我对我的问题做了一些编辑并提供了一个示例更新了我的答案当我将此应用到我的数据框中时,它对字母输入非常有效,然后返回NaN以获取数字。有没有办法解决这个问题?@aaronegland您的
DataFrame
列中的数字是否实际存储为字符串,即
'2'
而不是
2
。如果是这样,创建字典时只需修改字典中的键即可。有关如何创建新词典的信息,请参见我的更新。当我将其应用于数据框时,它对字母条目非常有效,但对数字返回NaN。有没有办法解决这个问题?@aaronegland您的
DataFrame
列中的数字是否实际存储为字符串,即
'2'
而不是
2
。如果是这样,创建字典时只需修改字典中的键即可。有关如何创建新词典的信息,请参见我的更新。