Python:将随机时间索引转为秒级索引及resample使用问题求助
解决Pandas时间序列秒级填充不符合预期的问题
嘿,我懂你碰到的这个麻烦——本来以为用resample('1s').pad()就能轻松实现秒级时间填充,结果出来的结果却不对对吧?大概率是你没先把时间列转换成Datetime索引,这是resample方法生效的关键前提!
我给你一步步拆解正确的处理流程:
1. 确保原始数据的时间列是Datetime类型并设为索引
resample是基于DatetimeIndex工作的,如果你的时间列只是普通字符串,resample根本没法识别时间间隔,自然出不来预期结果。
先看完整的代码示例:
import pandas as pd # 你的原始数据 raw_data = [ ["2017-11-23 16:30:52+01:00", 20], ["2017-11-23 16:30:58+01:00", 30], ["2017-11-23 16:31:30+01:00", 25] ] # 转换成DataFrame df = pd.DataFrame(raw_data, columns=["timestamp", "value"]) # 核心步骤:把时间字符串转成Datetime类型,再设置为索引 df["timestamp"] = pd.to_datetime(df["timestamp"]) df = df.set_index("timestamp")
2. 执行秒级填充
现在再用resample('1s').pad()(或者等价的ffill())就没问题了:
# 按秒重采样并向前填充 filled_df = df.resample('1s').pad() # 查看结果,比如截取52秒到59秒的部分 print(filled_df["2017-11-23 16:30:52":"2017-11-23 16:30:59"])
输出结果会和你期望的一致:
value timestamp 2017-11-23 16:30:52 20 2017-11-23 16:30:53 20 2017-11-23 16:30:54 20 2017-11-23 16:30:55 20 2017-11-23 16:30:56 20 2017-11-23 16:30:57 20 2017-11-23 16:30:58 30 2017-11-23 16:30:59 30
为什么之前的方法失效?
如果跳过了把时间列转成Datetime索引的步骤,resample会把数据当成普通的行索引来处理,而不是时间序列,自然不会按时间间隔生成连续的秒级时间戳,结果就不符合预期了。
内容的提问来源于stack exchange,提问作者Johannes
相关产品推荐
相关产品推荐

