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等组合来完成。但是如何使其与常规的最大/最小功能一起使用?
您将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将其返回。如果你没有遗漏值,那么它会按预期工作,如果你有缺失值,那么你应该转换dtype到datetime,这样的缺失值被转换为NaT使max工作正常