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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用等效字母替换矩阵中的所有数字相关的知识,希望对你有一定的参考价值。

有一个巨大的矩阵,其元素是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中的等价物是什么?

答案

你可以使用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
另一答案

这是一种方式。如果可能的话,我建议不要通过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

以上是关于用等效字母替换矩阵中的所有数字的主要内容,如果未能解决你的问题,请参考以下文章

Wps文字替换功能,怎么替换指定字母后面的回车符,例如只替换选择题ABCD四行后面的回车符为制表符

替换不在括号中的数字?

1844. 将所有数字用字符替换

如何一次性将word中的数字和字母全部改为“Times New Roman”字体

oracle有没有方法把数据库表中的字段的所有数据中的某个字母或数字修改或替换

[JavaScript] - replaceAll,将字符串中的字母或数字等全部替换掉的方式