use*_*057 -3 python null pandas
条件None == None是真还是假?
我有 2 个熊猫数据框:
import pandas as pd
df1 = pd.DataFrame({'id':[1,2,3,4,5], 'value':[None,20,None,40,50]})
df2 = pd.DataFrame({'index':[1,2,3], 'value':[None,20,None]})
In [42]: df1
Out[42]: id value
0 1 NaN
1 2 20.0
2 3 NaN
3 4 40.0
4 5 50.0
In [43]: df2
Out[43]: index value
0 1 NaN
1 2 20.0
2 3 NaN
Run Code Online (Sandbox Code Playgroud)
当我执行合并操作时,它看起来None == None是 True:
In [37]: df3 = df1.merge(df2, on='value', how='inner')
In [38]: df3
Out[38]: id value index
0 1 NaN 1
1 1 NaN 3
2 3 NaN 1
3 3 NaN 3
4 2 20.0 2
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时:
In [39]: df4 = df3[df3['value']==df3['value']]
In [40]: df4
Out[40]: id value index
4 2 20.0 2
In [41]: df3['value']==df3['value']
Out[41]: 0 False
1 False
2 False
3 False
4 True
Run Code Online (Sandbox Code Playgroud)
它表明这None == None是错误的。
Pandas 使用浮点Not a Number值,NaN来表示一系列数字中缺少某些内容。这是因为在数据的内部表示中更容易处理。您None的系列中没有任何对象。即便如此,如果使用dtype=object数据,None则用于对缺失值进行编码。请参阅处理缺失数据。
在这里并不重要,但 NaN 根据定义始终不等于 NaN:
>>> float('NaN') == float('NaN')
False
Run Code Online (Sandbox Code Playgroud)
在合并或广播时,Pandas 知道“缺失”是什么意思,没有对 NaN 或None系列中的值进行相等测试。显式跳过空值。
如果要测试值是否为空,请改用series.isnull()和series.notnull()方法。
| 归档时间: |
|
| 查看次数: |
1069 次 |
| 最近记录: |