【发布时间】:2019-01-20 11:33:51
【问题描述】:
我正在尝试获取两个 pandas Series 之间的最小值。碰巧该系列中的某些元素是NaN,当与数字进行比较时,我想得到NaN 的结果。
为什么我使用np.min函数
我使用了np.min 函数。这是因为我理解使用min 函数会导致错误,因为当列表中存在NaN 元素时,输出取决于列表中的顺序。
当我跑步时:
import numpy as np
print min([1,np.nan])
print min([np.nan,1])
我得到结果:
>>>
1
nan
当我跑步时:
import numpy as np
print np.min([np.nan,1])
print np.min([1,np.nan])
我得到了我的期望:
>>>
nan
nan
用于查找两个pandas 系列之间的最小值的玩具示例代码
考虑到以前的结果,我使用了np.minfunction。但是,如果我使用两个 Series 运行以下玩具示例代码,创建一个 DataFrame 并找到最小值,我会得到数字而不是 NaN,正如我在比较 NaN 和数字时所期望的那样。
import pandas as pd
import numpy as np
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([np.nan, np.nan, np.nan, 0, np.nan])
df1 = pd.DataFrame([s1,s2])
df2 = pd.DataFrame([s2,s1])
r1 = np.min(df1,axis=0)
r2 = np.min(df2,axis=0)
print r1
print r2
这会导致以下打印结果:
>>>
0 1.0
1 2.0
2 3.0
3 0.0
4 5.0
dtype: float64
0 1.0
1 2.0
2 3.0
3 0.0
4 5.0
dtype: float64
但我希望结果与Serie s2 相同,即DataFrame df1:
>>> df1
0 1 2 3 4
0 1.0 2.0 3.0 4.0 5.0
1 NaN NaN NaN 0.0 NaN
问题
在为我用两个系列创建的DataFrame 查找最小值时,是否有我遗漏的函数或者我做错了什么?我希望 NaN 成为比较数字和 NaN 元素时的结果...
注意:我将python 2.7与numpy 1.13.3和pandas 0.22.0一起使用
【问题讨论】:
-
我不确定我是否理解.. 在比较 any 数字时,您希望始终返回
NaN? -
正确@RafaelC
标签: python pandas numpy dataframe nan