我正在尝试在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等组合来完成。但是如何使它与常规的最大/最小功能一起工作?
答案 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}}正常工作