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

如何从数据列提取特定字符前子串?str.extract返回NaN问题

解决方法

针对你遇到的问题,核心是精准匹配x-y year格式的数据提取x值,同时保留其他格式的原始内容,以下是两种可行的实现方式(基于Pandas):

方法一:提取匹配内容 + 填充原始值

使用str.extract匹配目标格式并提取x,再用fillna将不匹配行的NaN替换为原始数据:

import pandas as pd

# 模拟数据示例
df = pd.DataFrame({
    'target_col': ['8-12 year', '5-9 year', '20', '15 year', 'xyz-abc year']
})

# 正则匹配"x-y year"格式,提取x部分;不匹配的行用原数据填充
df['cleaned_col'] = df['target_col'].str.extract(r'(.*?)-.*? year', expand=False).fillna(df['target_col'])

方法二:直接替换目标格式内容

使用str.replace仅对符合x-y year格式的行进行替换,将整行内容替换为x值,不匹配的行保持原样:

df['cleaned_col'] = df['target_col'].str.replace(r'(.*?)-.*? year', r'\1', regex=True)

原方法返回NaN的原因

你使用的正则(.{,2}(-))存在两个问题:

  1. 匹配范围过窄:仅能匹配最多2个字符加短横线的内容,无法覆盖所有可能的x值格式;
  2. str.extract默认会对不匹配正则的行返回NaN,且你未对这些NaN做填充处理,导致非目标格式行全部变成NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:20:31