You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:45:28