如何在Pandas DataFrame中对非UTC时间数据进行重采样?
Pandas非UTC时区DataFrame重采样解决方案
完全不需要将数据强制转换为UTC时区,只要你的DataFrame索引是时区感知的datetime类型,就可以直接完成重采样操作,步骤如下:
1. 确保索引为带时区的datetime类型
首先检查当前索引的类型:
print(df.index.dtype)
- 如果索引是
object类型(字符串格式时间),先转换为带时区的datetime:# 替换为你的数据实际时区,比如'Asia/Shanghai'、'Europe/London'等 df.index = pd.to_datetime(df.index).tz_localize('你的时区标识') - 如果索引已经是datetime但无时区信息,直接添加时区:
df.index = df.index.tz_localize('你的时区标识') - 如果索引时区不正确,可转换为目标时区:
df.index = df.index.tz_convert('你的目标时区标识')
2. 执行10分钟频率重采样
索引处理完成后,直接使用resample方法,根据需求选择聚合函数(如均值、求和、取最后一条数据等):
# 重采样为10分钟,以均值聚合为例,可替换为sum()、last()等 resampled_df = df.resample('10T').mean()
完整示例
假设你的数据索引是字符串格式的本地时间,时区为'Asia/Shanghai',完整代码如下:
import pandas as pd # 模拟你的数据(仅示例) data = {'value': [1,2,3,4,5,6,7,8,9,10]} times = ['2024-05-20 09:01:00', '2024-05-20 09:02:00', '2024-05-20 09:03:00', '2024-05-20 09:04:00', '2024-05-20 09:05:00', '2024-05-20 09:06:00', '2024-05-20 09:07:00', '2024-05-20 09:08:00', '2024-05-20 09:09:00', '2024-05-20 09:10:00'] df = pd.DataFrame(data, index=times) # 转换索引为带时区的datetime df.index = pd.to_datetime(df.index).tz_localize('Asia/Shanghai') # 重采样为10分钟频率 resampled_df = df.resample('10T').mean()
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

