如何处理含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
相关产品推荐
相关产品推荐

