Python 获得年度&;月份作为字符串,从日期开始,带有NA值

Python 获得年度&;月份作为字符串,从日期开始,带有NA值,python,pandas,datetime,Python,Pandas,Datetime,以下是当前的df: ID Date 1 3/29/2017 2 3 11/5/2015 4 5 2/28/2017 我试图在新列中以字符串形式获取年+月。这是我的代码: df["Year"] = df["Date"].dt.year df["Month"] = df["Date"].dt.month df["yyyy_mm"] = df["Year"].map(str) + "-" + df["Month"].map(str) 问题是,当我从日期提取年份和月份时,它

以下是当前的df:

ID  Date
1   3/29/2017
2   
3   11/5/2015
4   
5   2/28/2017
我试图在新列中以字符串形式获取年+月。这是我的代码:

df["Year"] = df["Date"].dt.year
df["Month"] = df["Date"].dt.month
df["yyyy_mm"] = df["Year"].map(str) + "-" + df["Month"].map(str)
问题是,当我从日期提取年份和月份时,它将返回float类型

ID  Date        Year        Month   yyyy_mm        I hope to get this
1   3/29/2017   2017.0      3.0     2017.0-3.0     2017-3
2                                   nan-nan         
3   11/5/2015   2015.0      11.0    2015.0-11.0    2015-11
4                                   nan-nan 
5   2/28/2017   2017.0      2.0     2017.0-2.0     2017-2
我试图使用
df[“Date”].dt.year.astype(int)
将其转换为int,因此没有
.0
,但我遇到了以下错误:无法将非有限值(NA或inf)转换为整数。因为专栏里没有NAN


我不想用0或其他东西填充全年和月份的na,我只想让它们保持为空,因为
date
在该行是空的

您应该使用直接从
Date
执行字符串转换

这不仅确保
NaT
行保持
NaT
,而且字符串的格式更好,例如,数月内零填充

df["yyyy_mm"] = df['Date'].dt.strftime('%Y-%m')

print(df)

   ID       Date    Year  Month  yyyy_mm
0   1 2017-03-29  2017.0    3.0  2017-03
1   2        NaT     NaN    NaN      NaT
2   3 2015-11-05  2015.0   11.0  2015-11
3   4        NaT     NaN    NaN      NaT
4   5 2017-02-28  2017.0    2.0  2017-02