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

Python Pandas中str.split分割无分隔符内容时返回NaN的问题解决

解决Pandas DataFrame列按需分割的问题

嘿,这个问题我碰到过!你的核心问题是当Target Pool列只有单个年份时,str.split(' ', expand=True)生成的列数不够,导致赋值到两列时全变成NaN了。我给你两个靠谱的解决方案:

方案一:用正则表达式提取(推荐)

正则表达式能精准匹配年份和可选的季度,处理这种混合格式的列特别好用:

import pandas as pd

# 假设你的DataFrame是df
df[['Target Year', 'Target Quarter']] = df['Target Pool'].str.extract(r'^(\d+)\s*(Q\d)?$')
# 查看结果
display(df[['Target Pool', 'Target Year', 'Target Quarter']])

正则说明:

  • ^(\d+):匹配开头的数字(也就是年份),把它捕获到第一组(对应Target Year)
  • \s*:匹配0个或多个空格,兼容可能的空格格式
  • (Q\d)?:匹配可选的季度(比如Q1、Q2),捕获到第二组(对应Target Quarter),?表示这个部分可以不存在

执行后你会得到想要的结果:

Target PoolTarget YearTarget Quarter
20212021NaN
20212021NaN
20212021NaN
2021 Q12021Q1
2021 Q12021Q1

方案二:先分割再补全缺失值

如果你更习惯用split方法,可以先分割成两列,再把缺失的年份补全:

# 先分割,n=1表示只分割一次(避免多空格的问题)
split_result = df['Target Pool'].str.split(' ', expand=True, n=1)
# 给分割后的列命名
split_result.columns = ['Target Year', 'Target Quarter']
# 把Target Year为空的行,用原列的年份填充
split_result['Target Year'] = split_result['Target Year'].fillna(df['Target Pool'])
# 把分割结果合并回原DataFrame
df = df.join(split_result)
# 查看结果
display(df[['Target Pool', 'Target Year', 'Target Quarter']])

这个方法的思路是:当原列没有空格时,split会生成第一列为NaN的结果,我们用fillna把这些NaN替换成原列的年份值,这样就保留了单个年份的数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:37:51