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

Nie*_*ysl 3 python date dataframe pandas

我正在尝试使用其他两个日期列中的最大(或最小)日期在熊猫数据框中创建一个新列。但是,当这些列中的任何一列中有NAN时,整个min / max列将变为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)
Run Code Online (Sandbox Code Playgroud)

我知道可以使用loc和<,>,isull等组合来完成。但是如何使其与常规的最大/最小功能一起使用?

EdC*_*ica 6

您将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
Run Code Online (Sandbox Code Playgroud)

如果您只是这样做:

df['col3'] = df['col1'].max()
Run Code Online (Sandbox Code Playgroud)

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

这些NaN值会导致dtype将提升为,float因此NaN将其返回。如果你没有遗漏值,那么它会按预期工作,如果你有缺失值,那么你应该转换dtypedatetime,这样的缺失值被转换为NaT使max工作正常