如何从小时级DatetimeIndex生成无重复的日级DatetimeIndex
问题:将小时级DatetimeIndex转换为无重复日级DatetimeIndex
我需要将小时级的DatetimeIndex转换为无重复的日级DatetimeIndex。目前我已通过以下代码生成了两个DatetimeIndex:
import pandas as pd snapshots = pd.date_range("2050-01-01 00:00", "2050-12-31 23:00", freq="H") days = pd.date_range("2050-01-01", "2050-12-31", freq="d")
但我希望直接从snapshots生成days。我尝试转换为PeriodIndex,但无法得到唯一日期:
days = snapshots.to_period().asfreq('d')
注:我需要的是'YYYY-MM-DD'格式的日期数据,但当前转换后会有全年8760条小时级重复数据
解决方案
直接从snapshots生成无重复日级DatetimeIndex,可以用这几种实用方法:
方法1:normalize() + unique()
normalize()将所有时间戳统一到当日00:00,再通过unique()去重,最后转回DatetimeIndex:days = pd.DatetimeIndex(snapshots.normalize().unique())方法2:提取date属性 + unique()
直接提取每个时间戳的日期部分,去重后转为DatetimeIndex:days = pd.DatetimeIndex(snapshots.date.unique())方法3:PeriodIndex去重后转回DatetimeIndex
先转为日级周期,去重后再转回时间戳格式:days = snapshots.to_period('D').unique().to_timestamp()
以上三种方法都能得到格式为YYYY-MM-DD的无重复日级DatetimeIndex,和手动生成的days结果完全一致。
内容的提问来源于stack exchange,提问作者francoua
相关产品推荐
相关产品推荐

