这是当前的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
在那一行是空的。
答案 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