python - 我可以有条件地替换列表中的值吗?
问题描述
我正在尝试在 pandas 中创建一个计算字段,并且给了我两个公式。由于数据问题,当一个公式导致 nan 时,我应该使用另一个公式。但是,我似乎无法获得输出我需要的功能。
这是数据的样子:
Nest year Hatched Unhatched Pipped Rel_Eggs
0 1 1980 120.0 NaN NaN 120.0
1 2 1980 NaN NaN NaN NaN
2 3 1980 62.0 NaN NaN 117.0
3 4 1980 0.0 NaN NaN NaN
4 5 1980 0.0 NaN NaN NaN
5 6 1980 110.0 NaN NaN 114.0
这是我已经尝试过的:
def new_success(data):
succ = []
for i in data.index:
nval = data.loc[i]['Hatched']/(data.loc[i]['Hatched'] + data.loc[i]['Unhatched'] + data.loc[i]['Pipped'])
if nval != np.inf and nval != np.nan:
succ.append(nval)
else:
val = data.loc[i]['Hatched']/data.loc[i]['Rel_Eggs']
succ.append(val)
return succ
第一个公式有效;第二,条件位不是。基于上面的数据框,对于这前 6 个值,我应该得到
[1.0, nan, 0.523, nan, nan, 0.965]
但我只是得到
[nan, nan, nan, nan, nan, nan]
解决方案
您得到的意外结果可能与此行有关:if nval != np.inf and nval != np.nan:
- 这不是您检查值是否为NaN
. 例子:
import numpy as np
noval = np.nan
print(noval != np.nan)
# prints True - but one might expect False...
# however this works for inf:
noval = np.inf
print(noval != np.inf)
# prints False
改为使用if np.isfinite(nval):
。
novals = [np.nan, np.inf]
[print(np.isfinite(v)) for v in novals]
# False
# False
更多信息,例如这里。
推荐阅读
- c# - 即使在管理员中运行并在清单中添加时也拒绝访问路径
- typescript - Error: Unexpected any. Specify a different type. (Typescript Dispatch)
- python - TypeError:列表索引必须是整数或切片,而不是从 JSON 文件中提取键到 CSV 的 str
- python - 在函数参数传递方面,C++ 中是否有任何“可变”类型,就像在 python 中一样
- python-3.x - 2d和3d数组之间的numpy条件操作
- html - 动态更改占位符值
- ios - 无法隐藏导航栏后退按钮 (SwiftUI)
- html - 无法理解一段代码上的 CSS 选择器
- wordpress - 限制管理员在 wordpress 多站点中添加用户
- python - 计算股票交易中的信号