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

在DataFrame中添加条件列时触发ValueError问题求助

问题根源

你触发的ValueError是因为在split_name函数里,直接用整个test_data['Tussenvoegsel'].str.len() != 0做判断——这会返回一个布尔值Series,而if语句需要单个布尔值,Python无法确定整个Series的“真假”,所以报错。

修复方案

要让函数能获取当前行的Tussenvoegsel值,而不是整个列。可以通过apply(axis=1)传递整行数据给函数,具体代码如下:

import re
import pandas as pd

def split_name(row):
    # 获取当前行的姓名和中间名
    full_name = row['Naam']
    tussenvoegsel = row['Tussenvoegsel']
    
    # 判断当前行的中间名是否非空(处理空字符串和NaN)
    if pd.notna(tussenvoegsel) and len(tussenvoegsel.strip()) > 0:
        return ""
    else:
        # 提取姓名中最后一个点后的内容(比如从"Dhr. V. Andersen"取"Andersen")
        match = re.search(r'\. (\w+)$', full_name)
        return match.group(1) if match else ""

# 应用函数到每行
test_data['Achternaam'] = test_data.apply(split_name, axis=1)
运行结果

执行后得到的DataFrame与你的预期完全一致:

Naam Tussenvoegsel Achternaam
0          Dhr. V. Andersen               Andersen
1  Mevr. J.C. van der Kosan       van der          
2     Dhr. P.M.M. van Zomer           van          
3     Mevr. M.J.J. Raimondo               Raimondo
4     Mevr. E. van de Doorn        van de          
额外说明
  • 替换了你原有的正则:原正则会匹配最后一个点及后续所有字符(比如". Andersen"),再手动截取[3:100]容易出错,用re.search(r'\. (\w+)$')可以直接提取目标姓氏。
  • 空值判断加入了pd.notna和strip(),覆盖了NaN、全空格字符串等边界情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:54:26