将矩阵中的所有数字替换为相应的字母

2024-09-30 02:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个巨大的矩阵,它的元素是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

我可以用一个循环来做,但是对于一个巨大的矩阵,它似乎不符合逻辑。应该有一种更像Python的方式来做这件事。在R中,chartr是此类替换的函数。对于1到9之间的数字,它的工作原理如下:chartr("123456789", "ABCDEFGHI", A)。Python中的等价物是什么


Tags: importnumpy元素dataframepandasasnp字母
2条回答

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

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

您可以使用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

相关问题 更多 >

    热门问题