pandas统计Netflix数据集演职人员数时报float无split属性错误
报错根因
触发'float' object has no attribute 'split'报错的核心原因是:cast列中的缺失值在pandas读取时会被默认解析为NaN,该值类型为float,你写的set_cast函数仅判断了None和字符串格式的'None',没有覆盖float类型的NaN缺失值,导致代码执行到缺失值位置时,尝试对float值调用split方法触发报错。
修复方案
方案1:修改原有自定义函数(适配原有逻辑)
在函数开头增加对pandas空值的判断,覆盖所有空值场景即可:
import pandas as pd def set_cast(val): # 统一判断所有空值类型:None、np.nan、pd.NA if pd.isna(val): return 0 if val == 'None': return 0 return len(val.split(', ')) data['num_of_cast'] = data['cast'].apply(set_cast)
方案2:pandas向量化写法(运行效率更高)
不需要自定义函数,直接用pandas内置的字符串处理方法,会自动跳过空值,大数据量下性能远好于apply循环:
import pandas as pd # 先把字符串形式的'None'转成标准空值,分割后计数,空值补0转整数 data['num_of_cast'] = ( data['cast'] .replace('None', pd.NA) .str.split(', ') .str.len() .fillna(0) .astype(int) )
注意事项
- 两种方案最终统计结果完全一致,可根据自己的代码习惯选择
- 不要用
val is np.nan判断空值,np.nan和自身不相等,直接判断会出现逻辑错误,用pd.isna()是最稳妥的空值判断方式
内容的提问来源于stack exchange,提问作者Saba saeed
相关产品推荐
相关产品推荐

