python - 按列查找包含 NaN 元素的 pandas DataFrame 的最小值

标签 python pandas numpy dataframe nan

我正在尝试获取两个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.min函数。但是,如果我使用两个 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.3pandas 0.22.0

最佳答案

IIUC,您可以将系列的作为np.array传递给np.min,并且您会得到您想要的行为期望来自np.min:

>>> np.min(df2.values,axis=0)
array([nan, nan, nan,  0., nan])
>>> np.min(df1.values,axis=0)
array([nan, nan, nan,  0., nan])

您还可以将参数 skipna=False 应用于 pands.DataFrame.min,以考虑 NaN 值:

>>> df1.min(axis=0, skipna=False)
0    NaN
1    NaN
2    NaN
3    0.0
4    NaN
dtype: float64
>>> df2.min(axis=0, skipna=False)
0    NaN
1    NaN
2    NaN
3    0.0
4    NaN
dtype: float64

关于python - 按列查找包含 NaN 元素的 pandas DataFrame 的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51827377/

相关文章:

python - 使用 python 通过 Django 发送 Godaddy 电子邮件

python - 在 Django 中为 ubuntu 11.10 设置 Postgresql 9.1 数据库

python - 使用 sort_index() 时的关键函数

python - 如何包装 numpy 数组类型?

python 连接到数据库抛出错误

python - 根据数据长度创建具有特定行为的循环

python - 将 pandas 数据框合并到新索引级别下

python - 列的 Pandas DataFrame.reset_index

python - MATLAB 矩阵乘法性能比 NumPy 快 5 倍

python - 如何将 numpy 数组和索引数组映射到 pandas 数据框?