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

对整个DataFrame应用自定义函数时报KeyError: 'EQ'如何解决?

问题原因及解决方案

核心报错原因:调用apply()时未指定axis=1参数,pandas的apply默认axis=0按列遍历,此时传入lambda的x是整列的Series对象,无法通过列名EQ取对应行的值,因此抛出KeyError。

解决方法

  • 方法1:指定按行遍历,修改apply参数即可
df_g['F'] = df_g.apply(lambda x: get_substr(x['EQ'],'-',1), axis=1)
  • 方法2:更高效的向量化实现(不需要自定义函数,性能远高于行遍历apply)
    如果你的需求是提取第一个-之前的子串,直接用pandas原生字符串方法即可:
df_g['F'] = df_g['EQ'].str.split('-').str[0]

如果需要提取第n个分隔符之间的内容,也可以直接使用str.split的n参数控制分割次数,避免自定义函数的性能损耗。

其他排查点

  • 确认列名无隐藏字符:执行print(df_g.columns.tolist()),检查EQ列名是否存在空格、换行符等肉眼不可见的特殊字符,如果存在可以先清洗列名:
df_g.columns = df_g.columns.str.strip()
  • 修正自定义函数的缩进错误:你提供的find_nth函数中return start行没有正确缩进,实际运行会抛出语法错误,修正后的函数如下:
def find_nth(string, char, n):
    start = string.find(char)
    while start >= 0 and n > 1:
        start = string.find(char, start+len(char))
        n -= 1
    return start

def get_substr(string,char,n):
    if n == 1:
        return string[0:find_nth(string,char,n)]
    else:
        return string[find_nth(string,char,n-1)+len(char):find_nth(string,char,n)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:36:04