PythonPandas对上个月的所有日子重新采样

2024-04-25 18:07:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv文件和一些数据和NaN。比如说:

Date;A;B;C;D;E
2/1/1982;N/A;0.20;0.00;N/A;0.00
2/2/1982;N/A;0.00;0.00;N/A;0.00
2/3/1982;N/A;0.00;0.00;N/A;0.00
2/4/1982;N/A;0.00;0.00;N/A;0.00
2/5/1982;N/A;0.00;0.00;N/A;0.00
2/6/1982;N/A;0.00;0.00;N/A;0.00
2/7/1982;N/A;0.00;0.00;N/A;0.00
2/8/1982;N/A;0.00;0.00;N/A;0.00
2/9/1982;N/A;0.00;0.00;N/A;0.00
...
2011-01-31;3.00;0.00;0.00;N/A;0.00

我必须计算全年数据的平均值,但在同一个月,不包括超过7个月的月份。另外,我想创建一个每日掩码,以便在每日尺度上计算一些函数

我就是这么做的:

1)读取数据帧

dfobs = pd.read_csv(file ,sep=';',index_col=0, header=0,parse_dates=True)

2)以月为单位计算NaN:

dfobs_na = ~dfobs.isnull()
obs_vals_bymonth_na = dfobs.isnull().groupby([dfobs.index.year,dfobs.index.month]).sum()

3)创建遮罩以排除超过7个月的月份

mask = obs_vals_bymonth_na <= na_filter

4)移回datetime索引:

mask.index.names = ['year', 'month']
mask = mask.reset_index()
mask.index = pd.to_datetime(mask['year'].astype(str) +
                                    '-' + mask['month'].astype(str))

5)我尝试重新采样ad每日刻度,以便创建另一个用于其他功能的掩码:

res_mask = mask.resample('MS').fillna(method='ffill')
res_mask = mask.resample('D').fillna(method='ffill')

问题来了:观测数据是10592,基本上都是1982-02-01 00:00到2011-01-31 00:00:00之间的天。 当我重新取样时,我得到了10562个。基本上,2011年1月我没有一整天的时间

我如何处理这个问题,并在上个月适当地重新取样

谢谢你的帮助

迪德罗


Tags: csv数据indexmasknanyearpdna