从每日数据中找出日均值和月均值

Find the daily and monthly mean from daily data

我对 python 很陌生,所以请多多包涵。

到目前为止,我有一个循环可以在一个日期范围内识别我的 netcdf 文件。 我现在需要计算日平均值,然后计算每个月的月平均值,并将其添加到我的数据框中,以便绘制时间序列。

这是我目前的代码

# !/usr/bin/python
# MODIS LONDON TIMESERIES 

print ('Initiating AQUA MODIS Time Series')

import pandas as pd              
import xarray as xr
from glob import glob
import netCDF4 
import numpy as np
import matplotlib.pyplot as plt
import os

print ('All packages imported')

#list of files 
days = pd.date_range (start='4/7/2002', end='31/12/2002')

#create dataframe
df = final_data = pd.DataFrame(index = days, columns = ['day', 'night'])

print ('Data frame created')

#for loop iterating through %daterange stated in 'days' to find path using string 

for day in days:
    path = "%i/%02d/%02d/ESACCI-LST-L3C-LST-MODISA-LONDON_0.01deg_1DAILY_DAY-%i%02d%02d000000-fv2.00.nc" % (day.year, day.month, day.day, day.year, day.month, day.day)
    print(path)

欢迎来到 SO!按照建议,请尝试制作一个最小的可重现示例。

如果您能够创建 Xarray 数据集,请按以下方法计算月度平均值

import xarray as xr

# tutorial dataset with air temperature every 6 hours
ds = xr.tutorial.open_dataset('air_temperature')

# reasamples along time dimension
ds_monthly = ds.resample(time='1MS').mean()

resample() 用于放大和缩小时间分辨率。如果您熟悉 Pandas,它的工作原理是相同的。

resample(time='1MS')的意思是沿time分组,1MS是频率。 1MS 表示按 1 个月采样(这是 1M 部分),新时间向量从月初开始(这是 S 部分)。这个很强大,可以提供不同的频率,看Pandas offset documentation

.mean() 在我们想要的频率范围内取数据的平均值。在这种情况下,每个月。

您可以将 mean() 替换为 min()max()median()std()var()sum()、也许还有其他一些人。

Xarray 有很棒的文档,resample() 文档是 here