如何在Pandas中修改时间序列频率时保持数据尺寸不变
时间戳按10分钟区间向下取整的实现
转换示例
转换前数据
import pandas as pd bf_data = pd.DataFrame({"ts":['2020-1-1 00:03:00','2020-1-1 00:12:00','2020-1-1 00:07:00','2020-1-1 00:18:00','2020-1-1 00:22:00'],'values':[0.2,0.3,0.5,0.9,1]})
转换后数据
af_data = pd.DataFrame({"ts":['2020-1-1 00:00:00','2020-1-1 00:10:00','2020-1-1 00:00:00','2020-1-1 00:10:00','2020-1-1 00:20:00'],'values':[0.2,0.3,0.5,0.9,1]})
需求说明
- 转换后的数据
af_data需与原数据bf_data维度完全一致 - 对
bf_data["ts"]中的时间戳按分钟区间取整:- 分钟数在
[0,10)区间 → 转换为'2020-1-1 00:00:00' - 分钟数在
[10,20)区间 → 转换为'2020-1-1 00:10:00' - 以此类推,每10分钟为一个区间,向下取整到区间起始时间
- 分钟数在
实现代码
import pandas as pd # 原始数据 bf_data = pd.DataFrame({"ts":['2020-1-1 00:03:00','2020-1-1 00:12:00','2020-1-1 00:07:00','2020-1-1 00:18:00','2020-1-1 00:22:00'],'values':[0.2,0.3,0.5,0.9,1]}) # 将ts列转换为datetime类型,便于时间操作 bf_data['ts'] = pd.to_datetime(bf_data['ts']) # 按10分钟频率向下取整,再转回指定字符串格式 bf_data['ts'] = bf_data['ts'].dt.floor('10min').dt.strftime('%Y-%m-%d %H:%M:%S') # 得到符合要求的转换后数据 af_data = bf_data.copy() # 验证输出 print(af_data)
代码说明
- 时间类型转换:把字符串格式的
ts列转为pandas的datetime类型,是后续时间区间处理的基础 - 10分钟区间取整:
dt.floor('10min')方法直接将时间戳向下对齐到最近的10分钟起始点,完美匹配需求的区间规则 - 格式转回字符串:用
dt.strftime()将处理后的datetime对象转回需求的字符串格式 - 维度一致性保障:直接在原数据列上修改后复制,确保转换后的数据shape与原数据完全一致
内容的提问来源于stack exchange,提问作者green jim
相关产品推荐
相关产品推荐

