无法摆脱numpy数组中的非unicode字符

时间:2017-11-16 16:34:23

标签: python arrays numpy unicode

我有一张桌子: vals = table.iloc[sum(which(pa_i),[1]),1:] 含量:

Out[249]: 
                      1         2       3
2  NA [1] (16.0 to N/A)  12.0 [2]  NA [1]

当我写vals.values时,我得到: vals

Out[250]: array([['NA\xa0[1] (16.0\xa0to\xa0N/A)', '12.0\xa0[2]', 'NA\xa0[1]']], dtype=object)

我只想将此表格放到数组或列表中,但之前想要替换\xa0值。申请时: v = print(map(lambda s: s.replace('\xa0' , ' '), vals))我不知道如何阅读此对象或何时阅读 np.char.replace(vals[0],'\xa0' , ' ')我收到错误“TypeError:非字符串数组上的字符串操作”。

将内容转换为数组或替换不需要的字符的最简单方法是什么?

修改

我有一个解决方案:v = vals.astype('str')v = np.char.replace(v,'\xa0' , ' ')

Out[306]: array([['NA [1] (16.0 to N/A)', '12.0 [2]', 'NA [1]']], dtype='<U20') 

但我对这个答案并不完全满意。我需要一些东西直接在vals变量上工作 - 例如通过这样做: a = vals[1:].toarray(?) 预期结果:

a
Out[318]: ['(16.0 to N/A)', '12.0 [2]', 'NA [1]]']

2 个答案:

答案 0 :(得分:0)

好吧,因为它包含int个元素,而不是str

这样做:

table.values = [str(v) for v in table.values]

答案 1 :(得分:0)

我找到了最好的方法:

vals
Out[357]: 
                      1         2       3
2  NA [1] (16.0 to N/A)  12.0 [2]  NA [1]

a = vals.values.tolist()

a
Out[358]: [['NA\xa0[1] (16.0\xa0to\xa0N/A)', '12.0\xa0[2]', 'NA\xa0[1]']]

a1 = [w.replace('\xa0', ' ') for w in a[0]]

a1
Out[359]: ['NA [1] (16.0 to N/A)', '12.0 [2]', 'NA [1]']

Pffff。也许在编码习惯方面不是最漂亮的,但我们能做些什么。