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

问题描述:

我试图在来自两个其他日期列的最大(或最小)日期的熊猫数据框中创建一个新列。但是,当这些列中的任何一个地方都有NAN时,整个最小/最大列将成为NAN。是什么赋予了?当使用数字列这工作正常...但与日期,新列是所有南非。下面是一些示例代码来说明这个问题:Pandas中日期列的最大值/最小值列包含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) 

我知道它可以与禄和<组合,>,ISNULL等来完成。但如何使它与常规的最大/最小功能一起工作?

你存储在列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。如果你没有缺失值的话,那就按预期工作,如果你有缺失值,那么你应该转换dtypedatetime如此缺失的值转换为NaT,使max正常工作

+0

感谢 - 这与日期时间确实工作。如果它可以处理日期,那也会很好,但是;-) – Nieumysl

+0

就像我说的,如果你没有'NaN'值,它会正常工作,即使它们是'NaT'它仍然会失败 – EdChum

+0

我的意思是如果它处理好会很好日期与NaNs :) – Nieumysl