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

Pandas处理DataFrame拆分字符串时出现KeyError:18的解决求助

解决提取姓氏时的KeyError:18问题

错误根源

你循环遍历的是train的索引,但却在test_df_bin中读取数据——两个DataFrame的索引大概率不匹配,当train存在索引18但test_df_bin没有该索引时,就会触发KeyError。

另外代码还有潜在风险:比如名字拆分后可能只有单个元素,执行del name_id[0]后列表为空,后续取name_id[0]会引发索引越界错误;部分姓氏包含空格(如"van der Sar"),直接取拆分后的第一个元素会丢失完整姓氏。

修复方案

方案1:修正循环逻辑(基础版)

遍历test_df_bin自己的索引,同时增加长度判断避免报错:

last_name = []

# 遍历目标DataFrame的索引,而非train的索引
for i in test_df_bin.index:
    name_parts = test_df_bin['Name'][i].split(' ')
    # 先判断拆分后的列表长度,防止索引越界
    if len(name_parts) > 1:
        # 取拆分后的第二个元素作为姓氏
        surname = name_parts[1]
    else:
        # 若名字无空格,直接用原名字作为姓氏
        surname = name_parts[0]
    last_name.append(surname)

test_df_bin['Surname'] = last_name

方案2:Pandas矢量化操作(推荐,更高效)

用Pandas内置的字符串方法替代循环,处理更高效且代码更简洁:

# 只拆分一次空格,将名字分为"名"和"姓氏(含空格)"两部分
test_df_bin['Surname'] = test_df_bin['Name'].str.split(' ', n=1).str[1]
# 对无空格的名字,用原名字填充姓氏列
test_df_bin['Surname'] = test_df_bin['Surname'].fillna(test_df_bin['Name'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:45:36