如何从DataFrame列提取数字子串并转为整数插入新列
解决方案
你遇到的问题是因为re.findall()返回的是匹配到的所有数字子串组成的列表,哪怕只有一个匹配结果也会以列表格式返回。要得到单个整数并自动去除前导零,可以按以下方式修改代码:
核心思路
- 从每个字符串中提取第一个数字子串(假设每行仅对应一个公路编号)
- 将提取到的带前导零的数字字符串转换为整数(
int类型会自动忽略前导零)
改进代码
基础版(假设每行都能匹配到数字)
import re # 提取第一个数字子串并转为整数 sp.insert(1, 'StateRoute', [int(re.findall(r'\d+', x)[0]) for x in sp['RouteIdentifier']])
稳健版(处理无数字的行,避免索引报错)
如果存在没有数字的行,基础版会抛出IndexError,可以用以下方式安全处理,无匹配时返回None:
def extract_route_num(s): nums = re.findall(r'\d+', s) return int(nums[0]) if nums else None sp.insert(1, 'StateRoute', sp['RouteIdentifier'].apply(extract_route_num))
效果示例
- 输入
'012d'→ 输出12(整数类型) - 输入
'I-95'→ 输出95 - 输入
'abc'→ 输出None(稳健版)
内容的提问来源于stack exchange,提问作者J. Sizzler
相关产品推荐
相关产品推荐

