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

如何处理含NaN的Pandas列:去除Year列括号并转NaN为0?

解决DataFrame Year列去除末尾括号并转换NaN为0的问题

Hey there! 你猜的没错,问题确实出在那些NaN值上——NaN在pandas里是float类型,直接用切片或者不加判断的lambda去处理,自然会抛出TypeError: 'float' object is not subscriptable的错误。下面给你几个简单有效的解决方案:

方法1:利用pandas字符串方法(最简洁)

pandas的str系列方法会自动跳过NaN值,非常适合处理这种混合了字符串和NaN的列:

import pandas as pd

# 假设你的DataFrame是data
data['Year'] = data['Year'].str.slice(stop=-1).fillna(0)
  • str.slice(stop=-1) 等价于字符串的[:-1],专门用来截取到倒数第二个字符,去掉末尾的)
  • fillna(0) 把所有NaN值替换成0

方法2:带类型判断的apply函数

如果更习惯用apply,可以先判断元素是不是字符串类型,再处理:

data['Year'] = data['Year'].apply(lambda x: x[:-1] if isinstance(x, str) else 0)

这里通过isinstance(x, str)过滤掉非字符串的元素(包括NaN),直接返回0,避免报错。

方法3:正则替换(更灵活)

如果数据里可能存在部分值没有末尾)的情况,用正则替换会更稳妥:

data['Year'] = data['Year'].str.replace(r'\)$', '', regex=True).fillna(0)

正则r'\)$'会精准匹配字符串末尾的),只替换这个位置的符号,不会影响其他内容。

这三种方法都能完美解决你的问题:既去掉了Year列值末尾的括号,又把所有NaN转换成了0,你可以根据自己的习惯选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:22:27