如何从pandas字符串列中正确提取带正负号的数值上下限
正确实现代码
你可以直接用str.extract()匹配两个捕获组完成拆分,不需要用extractall,正则表达式写为^(-?\d+)-(\d+)$即可区分负号和分隔符:
# 拆分valid_values为lower_limit、upper_limit两个字段 data_dict[['lower_limit', 'upper_limit']] = data_dict['valid_values'].str.extract(r'^(-?\d+)-(\d+)$') # 可选:将拆分得到的字符串转为整数类型 data_dict[['lower_limit', 'upper_limit']] = data_dict[['lower_limit', 'upper_limit']].astype(int)
逻辑说明
你的两种原有写法的问题分别是:第一种正则(\d+)未覆盖负号场景,导致下限的负号丢失;第二种正则([+-]\d+)会把分隔符的-识别为上限的符号,导致上限结果错误。
本次使用的正则匹配规则:
^匹配字符串开头- 第一个捕获组
(-?\d+):匹配可选负号 + 多位数字,对应范围的下限,会自动保留负号 - 中间的
-:固定匹配上下限之间的分隔符 - 第二个捕获组
(\d+):匹配多位正整数,对应范围的上限,不会误加负号 $匹配字符串结尾,避免异常格式干扰
你给出的所有测试样例都可以用以上代码正确拆分。
内容的提问来源于stack exchange,提问作者Zenvega
相关产品推荐
相关产品推荐

