处理IMDb评分时出现TypeError: 'float' object is not subscriptable报错如何解决
报错原因
- 核心问题是
df['IMDb']列中已经存在float类型的数值,并非所有值都是带/10后缀的字符串。float类型不支持下标切片操作,对float执行rating[0:3]就会触发这个TypeError。 - 你原写法中硬切前3位的逻辑兼容性极差,如果遇到
10/10这类两位整数的评分,切片会得到10/,转float时也会抛出格式错误。
修正方案
两种常用的兼容写法:
写法1:pandas向量化操作(性能更高,推荐)
df['IMDb'] = df['IMDb'].astype(str).str.replace('/10', '').astype(float)
写法2:兼容的列表推导式写法
df['IMDb'] = [float(str(rating).split('/')[0]) for rating in df['IMDb']]
两种写法都是先把所有值统一转为字符串,再通过替换或者分割的方式提取评分数值,不会受原有值的类型、评分位数影响,适配性更强。
内容的提问来源于stack exchange,提问作者Bhargav A
相关产品推荐
相关产品推荐

