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

如何对DataFrame多列10分钟间隔数据按月重采样求均值?

问题解决方案

1. 排查并修复语法错误

语法错误通常出在时间索引生成、循环创建DataFrame或resample调用环节,按以下步骤检查:

  • 确保时间索引生成代码正确:
    # 生成2017-01-01至2021-12-31的10分钟频率时间索引
    time_idx = pd.date_range(start='2017-01-01', end='2021-12-31', freq='10T')
    
  • 循环创建DataFrame时,保证列数据与时间索引长度匹配,避免索引对齐错误
  • 确认resample调用语法无误:必须是df.resample('1M').mean(),注意方法调用的括号和参数格式

2. 解决Sapan列全NaN问题

你提到已将原数据NaN替换为1、非NaN替换为0,但Sapan列仍全NaN,说明替换操作未生效或循环赋值出错:

  • 先验证Sapan列的替换结果:
    # 查看列值分布,确认替换是否成功
    print(zz['Sapan'].value_counts(dropna=False))
    
    若输出仍有NaN,重新执行替换逻辑:
    # 批量替换所有列的NaN为1,非NaN为0
    zz = zz.apply(lambda col: col.fillna(1).where(col.isna(), 0))
    # 或单独处理Sapan列
    zz['Sapan'] = zz['Sapan'].fillna(1).mask(zz['Sapan'].notna(), 0)
    
  • 循环创建DataFrame时,确保Sapan列数据被正确对齐到时间索引:
    processed_dfs = {}
    for col in zz.columns:
        # 将原列数据对齐到时间索引,缺失位置补1(匹配你的替换规则)
        aligned_data = zz[col].reindex(time_idx, fill_value=1)
        processed_dfs[col] = pd.DataFrame(aligned_data, columns=[col])
    

3. 完整可运行代码示例

import pandas as pd

# 1. 执行NaN替换
zz = zz.apply(lambda col: col.fillna(1).where(col.isna(), 0))

# 2. 生成标准时间索引
time_idx = pd.date_range(start='2017-01-01', end='2021-12-31', freq='10T')

# 3. 循环创建带时间索引的DataFrame
processed_dfs = {}
for col in zz.columns:
    aligned_data = zz[col].reindex(time_idx, fill_value=1)
    processed_dfs[col] = pd.DataFrame(aligned_data, columns=[col])

# 4. 月度重采样求均值
for col, df in processed_dfs.items():
    monthly_mean = df.resample('1M').mean()
    print(f"列 {col} 月度均值:")
    print(monthly_mean)

额外验证点

  • 检查新生成的DataFrame索引类型:必须是DatetimeIndex,否则resample会失效
    print(type(processed_dfs['Sapan'].index))
    # 正确输出应为 <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:40:34