用等效字母替换矩阵中的所有数字
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方式来做到这一点。在R
,chartr
是这种替代品的功能。对于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
使用apply
和pandas
,因为这些是循环的并且有开销。
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四行后面的回车符为制表符
如何一次性将word中的数字和字母全部改为“Times New Roman”字体