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
相关产品推荐
相关产品推荐

