Pandas resample FutureWarning求助:1分钟OHLC数据重采样至15分钟
嗨,这个问题我之前也踩过坑!pandas在新版本里确实弃用了resample()里的how参数,官方推荐用agg()或者apply()来替代,我给你两种解决方案,都能完美避开这个警告:
方法1:用agg()(推荐,简洁高效)
针对你这种每列需要不同聚合规则的场景,agg()是最直接的选择,原来的ohlc_dict可以直接传给它,完全不用改,只需要把how=ohlc_dict换成.agg(ohlc_dict)就行:
ohlc_dict = {'open':'first', 'high':'max', 'low':'min', 'close': 'last'} price15m = df.resample('15Min', closed='right').agg(ohlc_dict).dropna(how='any')
这种写法不仅符合pandas的新语法,还比旧的how参数更清晰,官方也更推荐用agg()来处理多列聚合的需求。
方法2:用apply()(适合复杂自定义逻辑)
如果之后你有更复杂的窗口计算需求(比如要结合多列做自定义运算),就可以用apply()。针对当前的OHLC场景,我们可以写一个自定义函数来处理每个15分钟窗口:
def calculate_ohlc(window): # 对每个采样窗口计算OHLC值 return pd.Series({ 'open': window['open'].iloc[0], # 窗口第一个开盘价 'high': window['high'].max(), # 窗口最高价 'low': window['low'].min(), # 窗口最低价 'close': window['close'].iloc[-1]# 窗口最后一个收盘价 }) price15m = df.resample('15Min', closed='right').apply(calculate_ohlc).dropna(how='any')
apply()会把每个15分钟的子数据集传给自定义函数,函数返回的Series会被组合成最终的重采样DataFrame。不过要注意,这种方式的性能比agg()稍弱一些,所以如果只是常规的OHLC聚合,优先用第一种方法哦。
另外再提个小提醒:确保你的DataFrame索引是datetime类型,不然resample()会报错,看你原来的代码能运行,应该已经满足这个条件啦~
内容的提问来源于stack exchange,提问作者Tanmay
相关产品推荐
相关产品推荐

