代码之家  ›  专栏  ›  技术社区  ›  dia

滚动时间序列数据:Nan问题

  •  0
  • dia  · 技术社区  · 6 年前

    我有一个时间序列数据集,目前处理得不是很好。

    绘图有所改进,但仍不能很好地利用标签空间。。所以现在我分享了没有它的情节,因为我想稍后再处理可视化问题。。

    时间序列数据图:

    enter image description here

    代码:

    dir = sorted(glob.glob("bsrn_txt_0100/*.txt"))
    gen_raw = (pd.read_csv(file, sep='\t', encoding = "utf-8") for file in dir)
    gen = pd.concat(gen_raw, ignore_index=True)
    gen.drop(gen.columns[[1,2]], axis=1, inplace=True)
    
    #gen['Date/Time'] = gen['Date/Time'][11:] -> cause error, didnt work
    filter = gen[gen['Date/Time'].str.endswith('00') | gen['Date/Time'].str.endswith('30')]
    filter['rad_tot'] = filter['Direct radiation [W/m**2]'] + filter['Diffuse radiation [W/m**2]']
    filter['Date/Time'] = filter['Date/Time'].str.replace('T', ' ')
    filter['Date/Time'] = pd.to_datetime(filter['Date/Time'])
    
    df = filter.filter(['Date/Time', 'rad_tot']).copy()
    df = df.set_index('Date/Time')
    print(df)
    plot_df = df.rolling(window=12).mean().fillna(0)
    print(plot_df)
    plot_df.plot()
    

    输出:

    enter image description here enter image description here

    当前版本:

    • 显然,前10个左右的rad\u tot值的移动平均值不应为Nan或0。不是吗?
    1 回复  |  直到 6 年前
        1
  •  0
  •   Fredz0r    6 年前

    您正在使用

    plot_df=df.rolling(window=12).mean()
    

    这是最后12分的平均值。因为对于前11个值,这无法计算,这些值产生“na”。

    plot_df.fillna(0)
    

    这会将na替换为0。

    您还可以从数据帧中删除前11个值,这样就不会在左侧出现空白。

    plot_df[:10].plot()
    

    或者计算滚动平均值并忽略绘图中的na值,以消除左右两侧的空白:

    df=df.rolling(window=12).mean()
    df.dropna().plot()