如何修复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
相关产品推荐
相关产品推荐

