Pandas含NaN值DataFrame转换分数赔率时报Iterable TypeError如何解决
解决方法
报错原因
你触发报错的根源是DataFrame中的空值NaN属于float类型,当convert函数接收到NaN值时,执行if '/' in s逻辑时会尝试对float类型做迭代判断,就会抛出「float类型不可迭代」的错误。
修改后的实现代码
import pandas as pd def convert(s): # 空值直接返回,保留原有NaN if pd.isna(s): return s # 转字符串判断兼容部分已经是数值类型的赔率 if '/' in str(s): num, den = s.split('/') return 1 + int(num) / int(den) else: return float(s) # 批量处理三列赔率 odds_cols = ['home_odds', 'draw_odds', 'away_odds'] df[odds_cols] = df[odds_cols].apply(convert)
逻辑说明
- 优先判断输入是否为空值,是空值直接返回不做处理,完全保留原DataFrame的空值分布
- 增加了转字符串的判断兜底,避免部分已经是数值格式的赔率触发同样的类型错误
- 批量处理列的写法替代重复的三次apply调用,代码更简洁易维护
内容的提问来源于stack exchange,提问作者user16304089
相关产品推荐
相关产品推荐

