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

pandas DataFrame字符串列按下划线位置截断返回NaN问题求解

问题原因
  • 核心问题在于 df[0].str.rfind('_') 返回的是和DataFrame行数一致的Series对象,而str[]切片语法传入Series时,pandas会将其视为行索引进行匹配,而非逐行对应位置做切片,匹配不到对应索引就会返回NaN。
  • 额外说明:如果字符串中不存在下划线,rfind会返回-1,你当前场景明确每行都有下划线所以不是本次问题的诱因,后续如果存在异常值需要额外处理该情况。
解决方法

以下几种方案都可以实现需求,按需选择即可:

方法1:split拆分取首段(最简洁)

按下划线拆分字符串后直接取第一个元素,为避免多个下划线导致拆分错误可以加n=1参数限制只拆分一次:

# 通用写法,自动处理多个下划线场景
df[0] = df[0].str.split('_', n=1).str[0]

方法2:正则提取(容错性最高)

用正则直接匹配下划线之前的所有内容,expand=False会直接返回Series无需额外格式转换:

df[0] = df[0].str.extract(r'^(.*?)_', expand=False)

方法3:保留rfind逻辑的写法

如果你坚持要用rfind的计算逻辑,可以转成逐行处理或者把位置结果转成numpy数组再切片:

# 逐行apply写法
df[0] = df[0].apply(lambda x: x[:x.rfind('_')])

# 转数组切片写法
df[0] = df[0].str[:df[0].str.rfind('_').values]

内容的提问来源于stack exchange,提问作者brendan1229

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:15:02