获得年份&月份为具有NA值的日期字符串

时间:2018-05-03 17:11:39

标签: 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)

问题是当我从日期中提取年份和月份时,它将返回浮动类型。

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或其他东西填写所有年份和月份,我只是想让它们为空,因为date在那一行是空的。

1 个答案:

答案 0 :(得分:1)

您应该使用pd.Series.dt.strftime直接从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