我有一个包含一些数据和NaN的csv文件。假设:
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
我必须计算全年的平均值,但要计算同一个月的平均值,并且不包括NaN大于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)创建掩码以排除NaN大于7的月份
mask = obs_vals_bymonth_na <= na_filter
4)移回日期时间索引:
mask.index.names = ['year', 'month']
mask = mask.reset_index()
mask.index = pd.to_datetime(mask['year'].astype(str) +
'-' + mask['month'].astype(str))
5)我尝试对广告的每日规模进行重新采样,以创建另一个可以在其他功能中使用的蒙版:
res_mask = mask.resample('MS').fillna(method='ffill')
res_mask = mask.resample('D').fillna(method='ffill')
问题来了:观测数据为10592,基本上是从1982-02-01 00:00:00到2011-01-31 00:00:00之间的所有日期。 重新采样时,我得到10562。基本上,我没有2011年1月的全天。
该如何处理并在上个月重新正确采样?
感谢您的任何帮助
Diedro