如何将DataFrame的时间戳索引设置为对应月份的第一天
解决方法
你之前的代码存在两个问题:
- 使用了
M频率,对应的是每月最后一天,不符合你要月度首日的需求 - 加了
kind='period'参数,返回的是Period类型索引,本身仅存储年月维度信息,不会显示日部分
你可以直接用MS(Month Start)作为重采样频率,不需要指定period类型,直接就能得到月度首日的datetime类型索引:
df['value'].resample('MS').sum()
如果已经生成了月度周期类型的结果,也可以手动将索引转成月度首日的标准日期格式:
res = df['value'].resample('M', kind='period').sum() res.index = res.index.to_timestamp(freq='MS')
完整测试示例
import pandas as pd # 构造测试数据,包含8、9两个月份的日期 dates = pd.date_range(start='2018-08-10', end='2018-09-20', freq='D') df = pd.DataFrame({'value': range(len(dates))}, index=dates) # 直接重采样到月度首日 result = df['value'].resample('MS').sum() print(result)
运行输出结果的索引就是你需要的2018-08-01、2018-09-01格式的标准日期,多个DataFrame统一用该方法处理后索引完全对齐,可以直接做后续的关联、运算操作。
内容的提问来源于stack exchange,提问作者user13696679
相关产品推荐
相关产品推荐

