相关疑难解决方法(0)

为什么在numpy`nan == nan`中是假的,而nan在[nan]中是真的?

虽然问题的第一部分(标题中)已经被回答了几次(即,为什么NaN不等于NaN?),我不明白为什么第二部分的工作方式(灵感)通过这个问题如何检查包含NaN的列表

即:

>> nan == nan
False

>> nan in [nan]
True
Run Code Online (Sandbox Code Playgroud)

考虑@DSM答案的问题的解释性附录.那么,为什么float("nan")表现与众不同nan?它不应该再次评估简单nan,为什么解释器这样做?

>> x = float("nan")
>> y = nan
>> x
nan
>> y
nan
>> x is nan, x is float("nan"), y is nan
(False, False, True)
Run Code Online (Sandbox Code Playgroud)

基本上,它nan在第一种情况下引用相同的泛型,但在第二种情况下创建单独的对象:

>> nans = [nan for i in range(2)]
>> map(id, nans)
[190459300, 190459300]
>> nans = [float("nan") for i in range(2)]
>> map(id, nans)
[190459300, 190459301]
Run Code Online (Sandbox Code Playgroud)

python numpy nan

33
推荐指数
1
解决办法
1万
查看次数

错误:float对象没有属性notnull

我有一个数据帧:

  a     b     c
0 nan   Y     nan
1  23   N      3
2 nan   N      2
3  44   Y     nan
Run Code Online (Sandbox Code Playgroud)

我希望得到这样的结果:

  a     b     c      d
0 nan   Y     nan   nan
1  23   N      3     96
2 nan   N      2    nan
3  44   Y     nan    44
Run Code Online (Sandbox Code Playgroud)

我希望有一个条件,当列a为空时,如果列b为N且列c不为null则d为空,则列d等于列a*列c否则列d等于列a

我已经完成了这段代码,但是我得到了错误:

def f4(row):
    if row['a']==np.nan:
       return np.nan
    elif row['b']=="N" & row(row['c'].notnull()):
       return row['a']*row['c']
    else:
       return row['a']

 DF['P1']=DF.apply(f4,axis=1)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我指出我的错误在哪里?我已经参考了这个并尝试了这个,但也得到错误基于if-elif-else条件创建一个新列

python pandas

11
推荐指数
4
解决办法
1万
查看次数

标签 统计

python ×2

nan ×1

numpy ×1

pandas ×1