用等效字母替换矩阵中的所有数字

问题描述 投票:0回答:2

有一个巨大的矩阵,其元素是1到15范围内的数字。我想将矩阵变换为元素为字母的矩阵,使得1变为“a”,2变为“b”,依此类推。举个简单的例子:

import pandas as pd
import numpy as np, numpy.random
numpy.random.seed(1)
A = pd.DataFrame (np.random.randint(1,16,10).reshape(2,5)) 
# A     0   1   2   3   4
#   0   6   12  13  9   10
#   1   12  6   1   1   2

预期的产出是

# B     0   1   2   3   4
#   0   f   l   m   i   j
#   1   l   f   a   a   b

我可以用循环来做,但对于一个巨大的矩阵,它似乎不合逻辑。应该有更多的pythonic方式来做到这一点。在Rchartr是这种替代品的功能。对于1到9之间的数字,它的工作原理如下:chartr("123456789", "ABCDEFGHI", A)。 Python中的等价物是什么?

python string numbers
2个回答
1
投票

你可以使用chr

>>> import pandas as pd
>>> import numpy as np
>>> numpy.random.seed(1)
>>> df = pd.DataFrame(np.random.randint(1, 16, 10).reshape(2, 5))
>>> df

    0   1   2  3   4
0   6  12  13  9  10
1  12   6   1  1   2


>>> df = df.applymap(lambda n: chr(n + 96))
>>> df
   0  1  2  3  4
0  f  l  m  i  j
1  l  f  a  a  b

1
投票

这是一种方式。如果可能的话,我建议不要通过lambda使用applypandas,因为这些是循环的并且有开销。

import pandas as pd
import numpy as np
import string

np.random.seed(1)
A = pd.DataFrame(np.random.randint(1,16,10).reshape(2,5)) 

#     0   1   2  3   4
# 0   6  12  13  9  10
# 1  12   6   1  1   2

d = dict(enumerate(string.ascii_uppercase, 1))
A_mapped = pd.DataFrame(np.vectorize(d.get)(A.values))

#    0  1  2  3  4
# 0  F  L  M  I  J
# 1  L  F  A  A  B
© www.soinside.com 2019 - 2024. All rights reserved.