Pandas将字符串转换为月末日期

3

我有一个问题,我的数据框中有一列是字符串格式,但我想在Python中将其转换为月末日期。例如,

   Id Name    Date  Number
0   1    A  201601       5
1   2    B  201602       6
2   3    C  201603       4

日期列只有年份和月份以字符串形式呈现。理想情况下,我的目标是:
   Id Name        Date  Number
0   1    A  01/31/2016       5
1   2    B  02/29/2016       6
2   3    C  03/31/2016       4

我在Excel中使用Endmonth和cut string可以做到这一点,但是当我在Python中尝试使用pd.to_datetime时,它没有起作用。谢谢!

2个回答

5
我们可以使用 MonthEnd
from pandas.tseries.offsets import MonthEnd
df.Date=(pd.to_datetime(df.Date,format='%Y%m')+MonthEnd(1)).dt.strftime('%m/%d/%Y')
df
Out[1336]: 
   Id Name        Date  Number
0   1    A  01/31/2016       5
1   2    B  02/29/2016       6
2   3    C  03/31/2016       4

不错的解决方案! :-) - MaxU - stand with Ukraine
当我运行代码时,出现了以下错误: int() argument must be a string, a bytes-like object or a number, not 'NoneType' 并且输出为 NaT 这是因为我的输入仍然是字符串吗? - TylerNG
@TylerNG df.Date=(pd.to_datetime(df.Date.astype(str),format='%Y%m')+MonthEnd(1)).dt.strftime('%m/%d/%Y') - BENY
@TylerNG 错误来自于int类型,你的 df.Date.dtype 应该是int型,在进行如上的转换成字符串后,就没问题了。 - BENY
@TylerNG 祝你编程愉快。 - BENY

2
你可以使用PeriodIndex
In [36]: df['Date'] = pd.PeriodIndex(df['Date'].astype(str), freq='M').strftime('%m/%d/%Y')

In [37]: df
Out[37]:
   Id Name        Date  Number
0   1    A  01/31/2016       5
1   2    B  02/29/2016       6
2   3    C  03/31/2016       4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接