我有一个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月我没有一整天的时间
我如何处理这个问题,并在上个月适当地重新取样
谢谢你的帮助
迪德罗
目前没有回答
相关问题 更多 >
编程相关推荐