如何从Pandas DatetimeIndex移除日部分?处理年月格式时间数据
移除Pandas DatetimeIndex中的日部分,保留年月格式
嘿,针对你处理年月数据集的需求,我给你两个实用的方法来去掉DatetimeIndex里的日部分,完美保留YYYY-MM的格式:
方法一:转换为PeriodIndex(推荐)
这个方法最适合时间序列操作,因为它会保留时间的周期特性,同时只显示年月信息。
假设你已经得到了带日的DatetimeIndex(比如new_index),只需要一行代码就能转换:
# 把DatetimeIndex转成仅含年月的PeriodIndex monthly_period_index = new_index.to_period('M')
这样得到的monthly_period_index里的元素就是类似2011-03的周期对象,既保留了时间的可操作性(比如按年月筛选、排序),又没有多余的日部分。
另外补充个小细节:你之前代码里pd.to_datetime(new_dates,format='%Y%m%')的格式参数写错啦,应该改成'%Y-%m'——因为你的new_dates是2011-03这样的字符串,修正后转出来的DatetimeIndex才会正确识别年月。
方法二:转换为字符串格式(适合仅需展示场景)
如果你只是需要把时间显示成YYYY-MM的字符串,不需要时间序列的功能,可以用strftime方法直接格式化:
# 将DatetimeIndex转成YYYY-MM格式的字符串数组 monthly_str_dates = new_index.strftime('%Y-%m')
不过要注意,这样得到的是字符串列表,会失去Pandas时间序列的便捷性,所以更推荐第一种方法。
另外,其实你处理原始日期字符串的步骤可以简化,不用循环,直接用Pandas的str.replace更高效:
# 一步完成字符串替换,替代原来的循环操作 indicator_ccgs['Time period Sortable'] = indicator_ccgs['Time period Sortable'].astype(str).str.replace('00', '-') # 直接转成PeriodIndex,跳过DatetimeIndex的中间步骤 new_index = pd.to_datetime(indicator_ccgs['Time period Sortable'], format='%Y-%m').to_period('M')
这样代码更简洁,运行效率也更高~
内容的提问来源于stack exchange,提问作者Rony Armon
相关产品推荐
相关产品推荐

