使用pandas与正则提取逗号前内容返回NaN的解决方法
问题原因
你写的正则表达式存在两处错误,导致匹配全失败返回NaN:
- 字符匹配规则错误:
w不是合法的元字符,即使补全为\w也只能匹配字母、数字、下划线,无法匹配地点名称里的连字符-、法语带音符特殊字符(如é、Î等) - 匹配逻辑错误:你没有指定匹配从开头到第一个逗号前的所有内容,也没有做捕获逻辑的适配。
解决代码
有两种常用的实现方式,都可以达到你的预期效果:
方式1:正则提取(推荐,性能更高)
# ^([^,]+), 表示匹配字符串开头到第一个逗号前的所有非逗号字符,没有逗号的场景返回NaN,再填充为空字符串 df['redux'] = df['location'].str.extract(r'^([^,]+),', expand=False).fillna('')
方式2:字符串分割判断(逻辑更直观)
# 按逗号分割后判断是否存在逗号,存在则取第一个元素,否则返回空 df['redux'] = df['location'].apply(lambda x: x.split(',')[0] if ',' in x else '')
运行两种代码的输出都和你预期的结果完全一致。
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

