从DataFrame提取温度数据时丢失负号的解决方法
问题:提取温度数据时保留零下温度的负号
初始DataFrame数据:
Temp Prec 0 3 / -4 °C - 1 1 / -17 °C - 2 -7 / -18 °C - 3 6 / -8 °C - 4 8 / 1 °C - 5 8 / 0 °C 1.3 mm 6 8 / 0 °C 7.0 mm 7 6 / -1 °C - 8 4 / 0 °C 4.0 mm 9 5 / 2 °C 23.8 mm 10 6 / 1 °C - 11 5 / -1 °C - 12 4 / -1 °C - 13 7 / 0 °C 10.6 mm 14 7 / 1 °C 29.7 mm
原提取代码:
df2['Temp'] = df2['Temp'].str.extract('(\d+)') + 'C'
执行后丢失负号的结果:
Temp Prec 0 3C - 1 1C - 2 7C - 3 6C - 4 8C - 5 8C 1.3 mm 6 8C 7.0 mm 7 6C - 8 4C 4.0 mm 9 5C 23.8 mm 10 6C - 11 5C - 12 4C - 13 7C 10.6 mm 14 7C 29.7 mm
如何修改代码以保留零下温度的负号?
解决方案
原正则表达式(\d+)仅匹配纯数字,未包含负号。只需调整正则为(-?\d+),即可匹配带负号的数字:
df2['Temp'] = df2['Temp'].str.extract('(-?\d+)') + 'C'
规则说明:
-?表示匹配0个或1个负号,兼容正数(无负号)和负数(带负号)的情况\d+匹配1个及以上的数字
执行后正确结果:
Temp Prec 0 3C - 1 1C - 2 -7C - 3 6C - 4 8C - 5 8C 1.3 mm 6 8C 7.0 mm 7 6C - 8 4C 4.0 mm 9 5C 23.8 mm 10 6C - 11 5C - 12 4C - 13 7C 10.6 mm 14 7C 29.7 mm
如果需要提取的是斜杠后的第二个温度值(如原数据中的-4°C、-17°C),可调整正则匹配目标位置的带负号数字:
df2['Temp'] = df2['Temp'].str.extract('/\s*(-?\d+)') + 'C'
对应结果:
Temp Prec 0 -4C - 1 -17C - 2 -18C - 3 -8C - 4 1C - 5 0C 1.3 mm 6 0C 7.0 mm 7 -1C - 8 0C 4.0 mm 9 2C 23.8 mm 10 1C - 11 -1C - 12 -1C - 13 0C 10.6 mm 14 1C 29.7 mm
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

