python - 遇到 NaN 值时可迭代的 TypeError
问题描述
我有一个包含 NaN 值的数据框
df:
score home_odds draw_odds away_odds
0 1:0 59/100 263/100 231/50
1 2:1 24/25 53/20 237/100
2 0:2 221/100 93/50 67/50
3 1:1 259/50 251/100 16/25
.......
1970 NaN 36/25 197/100 47/25
1971 NaN NaN NaN NaN
1972 NaN NaN NaN NaN
1973 NaN NaN NaN NaN
1974 NaN 17/5 263/100 39/50
1975 NaN 77/50 21/10 7/4
1976 NaN 19/50 86/25 691/100
1977 NaN NaN NaN NaN
当我尝试使用转换公式将小数值转换为十进制时
例如:
123/100 = (123/100 + 1) = 2.23
333/100 = (333/100 +1) = 4.33
计算为小数值 + 1
当然,保留十进制值与代码一样:
def convert(s):
if '/' in s: # is a fraction
num, den = s.split('/')
return 1 + (int(num) / int(den))
else:
return float(s)
df['home_odds'] = df['home_odds'].apply(convert)
df['away_odds'] = df['away_odds'].apply(convert)
df['draw_odds'] = df['draw_odds'].apply(convert)
我收到错误消息:
if '/' in s: # is a fraction
TypeError: argument of type 'float' is not iterable
当我删除NaN
值时,公式有效。
我想将NaN
值保留在数据框中并仅转换非值NaN
。
我该怎么做?
解决方案
检查函数开头的数据是否Nan
(即 a ):float
def convert(s):
if pd.isnull(s):
return s
if '/' in s: # is a fraction
num, den = s.split('/')
return 1 + (int(num) / int(den))
else:
return float(s)
推荐阅读
- github - 我无法在没有收到此错误的情况下推送到 github
- excel - MS Excel 中的最大值和最小值在正负值范围内
- sql - 我是否正确实施了 SCD 类型 1 和 7
- java - 如何在 Android 中将音频文件上传到服务器?
- jenkins - 使用 Linux 和 Jenkins 设置时找不到 pmrep 命令(遵循所有建议)
- typescript - TypeScript TS7053:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{}”
- xcode - xcode 11.6.x 和 mac os 10.15.x 构建速度慢/没有多线程
- r - 当我使用 $legend 制作情节时,传说没有出现在 choropleth
- node.js - TooManyRequestsException:超出速率。同时从节点 js 一次创建许多认知用户
- c - ld:包含头文件时,未找到架构 x86_64 的符号