【发布时间】:2018-02-04 13:30:42
【问题描述】:
我正在尝试获取包含日期的两列的行最大值(和最小值)
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
如何做到这一点?
【问题讨论】:
-
问题似乎不在于 NaN 是 NaN;任何浮动似乎都会导致同样的问题。我认为浮动触发了所有元素到浮动的转换。
-
你为什么不使用
pandasdatetime` dtype 而不是objectdtype? -
FWIW,我不认为这是一个错误。默认情况下,
numeric_only参数设置为 None ,其值由(混合)dtypes 确定。 DataFrame 中的单个浮点数将numeric_only标志设置为 True 并且由于您没有任何数字列,因此您的结果都是 NaN。pd.DataFrame({'A': ['a', 'b', 'c']}).max(axis=1, numeric_only=True)也返回所有的 NaN。并且df_nan.max(axis=1, numeric_only=False)引发了一个 TypeError 应该做的事情。
标签: python pandas date datetime nan