如何在pandas中替换字符串中的非数字或小数

时间:2017-06-27 10:21:16

标签: python pandas

我有一个列,其度数与度数符号有关。

42.9377º
42.9368º
42.9359º
42.9259º
42.9341º

数字0应该替换度数符号

我尝试使用regex或str.replace但我无法弄清楚确切的unicode字符。

源xls将其设为º

错误将其显示为obelus ÷

打印数据框显示为?

度数符号的确切位置可能会有所不同,具体取决于小数的四舍五入,因此我无法使用精确的字符串位置替换。

2 个答案:

答案 0 :(得分:2)

使用str.replace

df['a'] = df['a'].str.replace('º', '0')
print (df)
          a
0  42.93770
1  42.93680
2  42.93590
3  42.92590
4  42.93410

#check hex format of char
print ("{:02x}".format(ord('º')))
ba

df['a'] = df['a'].str.replace(u'\xba', '0')
print (df)
          a
0  42.93770
1  42.93680
2  42.93590
3  42.92590
4  42.93410

extract floats的解决方案。

df['a'] = df['a'].str.extract('(\d+\.\d+)', expand=False) + '0'
print (df)
          a
0  42.93770
1  42.93680
2  42.93590
3  42.92590
4  42.93410

如果所有最后的值都是º,则可以使用indexing with str

df['a'] = df['a'].str[:-1] + '0'
print (df)
          a
0  42.93770
1  42.93680
2  42.93590
3  42.92590
4  42.93410

答案 1 :(得分:1)

如果您知道它总是最后一个字符,您可以删除该字符并附加“0”。

s = "42.9259º"

s = s[:-1]+"0"

print(s) # 42.92590