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

DataFrame列处理函数报TypeError: 'NoneType' object is not subscriptable求助

问题解决:TypeError: 'NoneType' object is not subscriptable

错误根源很明确:你的DataFrame列A里存在None值(或非列表类型的元素),当apply遍历到这些元素时,执行val[0]就会报错——因为None无法通过下标访问。

修复后的函数代码

def remove(val):
    # 先处理val为None或空列表的异常情况
    if val is None or not val:
        return []
    even = []
    odd = []
    if val[0] % 2 == 0:
        for i in val:
            if i % 2 == 0:
                even.append(i)
        return even
    else:
        for i in val:
            if i % 2 != 0:
                odd.append(i)
        return odd

df['B'] = df['A'].apply(remove)

关键改动说明

  • 新增前置判断if val is None or not val:拦截None值和空列表,直接返回空列表(可根据需求调整默认值),避免后续代码触发下标访问错误。
  • 将df.B改为df['B'],这是更规范的DataFrame列访问方式,能避免和内置属性名冲突。

补充:列表推导式简化版本(你提到的优雅写法)

如果想精简代码,列表推导式可以在保留逻辑的同时让函数更简洁:

def remove(val):
    if val is None or not val:
        return []
    target_parity = val[0] % 2
    return [num for num in val if num % 2 == target_parity]

df['B'] = df['A'].apply(remove)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:54:34