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
。如果你没有缺失值的话,那就按预期工作,如果你有缺失值,那么你应该转换dtype
到datetime
如此缺失的值转换为NaT
,使max
正常工作
感谢 - 这与日期时间确实工作。如果它可以处理日期,那也会很好,但是;-) – Nieumysl
就像我说的,如果你没有'NaN'值,它会正常工作,即使它们是'NaT'它仍然会失败 – EdChum
我的意思是如果它处理好会很好日期与NaNs :) – Nieumysl