Pandas中的最大/最小日期列,列包括nan值

时间:2017-06-01 09:58:52

标签: python date pandas dataframe

我正在尝试在pandas数据框架中创建一个新列,其中包含来自其他两个日期列的最大(或最小)日期。但是,当在这两列中的任何一列中存在NAN时,整个最小/最大列变为NAN。是什么赋予了?使用数字列时,这很好用...但是对于日期,新列都是NAN。以下是一些示例代码来说明问题:

df = pd.DataFrame(data=[[np.nan,date(2000,11,1)], 
                        [date(2000,12,1), date(2000,9,1)],
                        [date(2000,4,1),np.nan],
                        [date(2000,12,2),np.nan]], columns=['col1','col2'])

df['col3'] = df[['col1','col2']].max(axis=1)

我知道可以使用loc和&lt ;,>,isnull等组合来完成。但是如何使它与常规的最大/最小功能一起工作?

1 个答案:

答案 0 :(得分:4)

您要在列中存储date个对象,如果您转换为datetime,那么它会按预期工作:

In[10]:
df['col1'] = pd.to_datetime(df['col1'])
df['col2'] = pd.to_datetime(df['col2'])
df

Out[10]: 
        col1       col2  col3
0        NaT 2000-11-01   NaN
1 2000-12-01 2000-09-01   NaN
2 2000-04-01        NaT   NaN
3 2000-12-02        NaT   NaN

In[11]:
df['col3'] = df[['col1','col2']].max(axis=1)
df

Out[11]: 
        col1       col2       col3
0        NaT 2000-11-01 2000-11-01
1 2000-12-01 2000-09-01 2000-12-01
2 2000-04-01        NaT 2000-04-01
3 2000-12-02        NaT 2000-12-02

如果您只是这样做:

df['col3'] = df['col1'].max()

这会引发TypeError: '>=' not supported between instances of 'float' and 'datetime.date'

NaN值导致dtype被提升为float,因此会返回NaN。如果您没有缺失值,那么它将按预期工作,如果您缺少值,则应将dtype转换为datetime,以便将缺失的值转换为NaT,以便{ {1}}正常工作