You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复FutureWarning:请使用'min'替代'T'的警告问题

解决pd.Timedelta触发的'T'废弃警告问题

问题原因

你代码里虽然显式用的是"1min"这类单位,但pandas在处理pd.Timedelta(freq)的字符串解析或后续比较逻辑时,内部会用到已废弃的分钟缩写'T',从而触发警告。

解决方法

有两种简洁的修复方式:

方式一:改用pd.to_timedelta解析字符串

pd.to_timedelta对时间增量字符串的解析更规范,不会触发旧单位的警告,直接替换原代码中的pd.Timedelta(freq):

if median_diff > pd.to_timedelta(freq):

方式二:显式指定单位构造Timedelta

如果你想完全避免字符串解析的潜在问题,可以拆分freq参数的数值和单位,显式用关键字参数构造Timedelta:

# 拆分freq中的数值和单位(适用于"Xmin"格式的输入)
min_count = int(freq.replace("min", ""))
threshold = pd.Timedelta(minutes=min_count)
if median_diff > threshold:

修改后的完整代码

import sys
import pandas as pd

@staticmethod
def apply_rolling_average_if_needed(df, freq="1min", rolling_window="5min"):
    """ Apply rolling average if time difference between consecutive 
        timestamps is not greater than the specified frequency.
    """

    print("Warning: If data has a one minute or less sampling frequency a rolling average will be automatically applied")
    sys.stdout.flush()

    time_diff = df.index.to_series().diff().iloc[1:]
    
    # Calculate median time difference to avoid being affected by outliers
    median_diff = time_diff.median()

    print(f"Warning: Median time difference between consecutive timestamps is {median_diff}.")
    sys.stdout.flush()

    # 替换为pd.to_timedelta消除警告
    if median_diff > pd.to_timedelta(freq):
        print(f"Warning: Skipping any rolling averaging...")
        sys.stdout.flush()

    else:
        df = df.rolling(rolling_window).mean()
        print(f"Warning: A {rolling_window} rolling average has been applied to the data.")
        sys.stdout.flush()
    return df

内容的提问来源于stack exchange,提问作者bbartling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:35:55