【发布时间】:2018-11-20 12:33:12
【问题描述】:
有没有办法用 Python 中的有序数字替换二维数组列中的字符串值?
例如说你有一个二维数组:
a = np.array([['A',0,'C'],['A',0.3,'B'],['D',1,'D']])
a
Out[57]:
array([['A', '0', 'C'],
['A', '0.3', 'B'],
['D', '1', 'D']], dtype='<U3')
如果我想用数字 0,0,1 和 'C','B','D' 替换第一列中的字符串值 'A','A','D' 和 0,1 ,2 有没有一种有效的方法。
了解一下可能会有所帮助:
- 不同列中的替换编号与列无关。即,字符串被数字替换的每一列都将从 0 开始,并增加到该列中唯一值的数量。
- 以上是一个测试用例,实际数据更大,字符串列更多。
这是我快速想出的解决此问题的示例方法:
for j in range(a.shape[1]):
b = list(set(a[:,j]))
length = len(b)
for i in range(len(b)):
indices = np.where(a[:,j]==b[i])[0]
print(indices)
a[indices,j]=i
然而,这似乎是一种低效的实现方式,并且也无法区分列中的浮点值或字符串值,并且默认使用数字字符串替换值:
a
Out[91]:
array([['1.0', '0.0', '2.0'],
['1.0', '1.0', '0.0'],
['0.0', '2.0', '1.0']], dtype='<U3')
对于此事的任何帮助将不胜感激!
【问题讨论】:
标签: python arrays string numpy 2d