行的min()和max()对于具有NaN的列失败

道德运动

我正在尝试获取包含日期的两列的按行最大值(和最小值)

from datetime import date
import pandas as pd
import numpy as np    

df = pd.DataFrame({'date_a' : [date(2015, 1, 1), date(2012, 6, 1),
                               date(2013, 1, 1), date(2016, 6, 1)],
                   'date_b' : [date(2012, 7, 1), date(2013, 1, 1), 
                               date(2014, 3, 1), date(2013, 4, 1)]})

df[['date_a', 'date_b']].max(axis=1)
Out[46]: 
0    2015-01-01
1    2013-01-01
2    2014-03-01
3    2016-06-01

如预期的那样。但是,如果数据帧包含单个NaN值,则整个操作将失败

df_nan = pd.DataFrame({'date_a' : [date(2015, 1, 1), date(2012, 6, 1),
                                   np.NaN, date(2016, 6, 1)],
                       'date_b' : [date(2012, 7, 1), date(2013, 1, 1), 
                                   date(2014, 3, 1), date(2013, 4, 1)]})

df_nan[['date_a', 'date_b']].max(axis=1)
Out[49]: 
0   NaN 
1   NaN
2   NaN
3   NaN
dtype: float64

这里发生了什么?我期待这个结果

0    2015-01-01
1    2013-01-01
2    NaN
3    2016-06-01

如何做到这一点?

胡安帕·阿里维利亚加

我会说最好的解决方案是使用适当的dtype熊猫提供了很好的集成datetime dtype因此请注意,您正在使用objectdtypes ...

>>> df
       date_a      date_b
0  2015-01-01  2012-07-01
1  2012-06-01  2013-01-01
2         NaN  2014-03-01
3  2016-06-01  2013-04-01
>>> df.dtypes
date_a    object
date_b    object
dtype: object

但是请注意,使用时问题消失了

>>> df2 = df.apply(pd.to_datetime)
>>> df2
      date_a     date_b
0 2015-01-01 2012-07-01
1 2012-06-01 2013-01-01
2        NaT 2014-03-01
3 2016-06-01 2013-04-01
>>> df2.min(axis=1)
0   2012-07-01
1   2012-06-01
2   2014-03-01
3   2013-04-01
dtype: datetime64[ns]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

您可以从具有MIN或MAX值的行中获得另一列吗?

Pandas:对于具有多列整数和字符串的数据框,有没有办法指定 max() 函数查看哪一列?

选择具有groupby和NaN列的第一行

在熊猫中合并具有非唯一行和 NaN 的两列

使用SQL窗口函数填充1列具有值0的行,可能具有行索引的下一个max / prev min值

删除具有任何/所有NaN值的行/列

选择具有MAX(日期)运费值的MIN(日期)和MAX(日期)

为什么numpy.nan的max和min有如此奇怪的行为?

选择行中具有最少NaN值的矩阵的列

过滤出某些列具有NaN值的行

具有动态列范围的行和

具有标题行和列的JTable

具有行和列标题的DataGrid

对于每一行,查找列中具有相同值的所有行

为什么max()和min()对于Python 3中的范围对象不能有效工作?

在Java中生成具有max,min和mean(average)的随机数

PHP max()和min()具有不同类型的怪异行为

生成具有预定义平均值,std,min和max的随机数

Excel-生成一组具有MIN和MAX的正态分布的数字

熊猫在某些列中相对于其他列删除具有重复项的行

SQLITE - 测试从 SELECT 返回的所有行对于特定列是否具有相同的值

在 Python 数组中使用 max() 和 min() 失败

条件和行和列具有双循环

对于每一行,循环遍历具有 Pandas 值的每一列

熊猫根据具有不同列标题的另一个数据框将多个列和行值设置为nan

SQL 查询选择小于或等于现有列的 (max - min) 的行

如果下一行在特定列中具有NaN,则串联熊猫行

如何删除另一列中具有特定值的所有 NaN 值的行?

选择所有包含 NaN 的行,直到出现具有值的列