Python 如何在不跳过pandas中nan值的情况下重新采样

Python 如何在不跳过pandas中nan值的情况下重新采样,python,pandas,Python,Pandas,我正在尝试获取具有NaN值的10天数据聚合。如果在10天的持续时间内存在nan值,则10天的总和应返回nan值 当我应用以下代码时,pandas将NaN视为零,并重新计算剩余天数的总和 dateRange = pd.date_range(start_date, periods=len(data), freq='D') # Creating a data frame so that the timeseries can handle numpy array. df = pd.DataFrame(d

我正在尝试获取具有NaN值的10天数据聚合。如果在10天的持续时间内存在nan值,则10天的总和应返回nan值

当我应用以下代码时,pandas将NaN视为零,并重新计算剩余天数的总和

dateRange = pd.date_range(start_date, periods=len(data), freq='D')
# Creating a data frame so that the timeseries can handle numpy array.
df = pd.DataFrame(data)
base_Series = pd.DataFrame(list(df.values), index=dateRange)
# Converting to aggregated series
agg_series = base_Series.resample('10D', how='sum')
agg_data = agg_series.values 
样本数据:

2011-06-01  46.520536
2011-06-02   8.988311
2011-06-03   0.133823
2011-06-04   0.274521
2011-06-05   1.283360
2011-06-06   2.556313
2011-06-07   0.027461
2011-06-08   0.001584
2011-06-09   0.079193
2011-06-10   2.389549
2011-06-11        NaN
2011-06-12   0.195844
2011-06-13   0.058720
2011-06-14   6.570925
2011-06-15   0.015107
2011-06-16   0.031066
2011-06-17   0.073008
2011-06-18   0.072198
2011-06-19   0.044534
2011-06-20   0.240080
2011-06-01  62.254651
2011-06-11   7.301481
输出:

2011-06-01  46.520536
2011-06-02   8.988311
2011-06-03   0.133823
2011-06-04   0.274521
2011-06-05   1.283360
2011-06-06   2.556313
2011-06-07   0.027461
2011-06-08   0.001584
2011-06-09   0.079193
2011-06-10   2.389549
2011-06-11        NaN
2011-06-12   0.195844
2011-06-13   0.058720
2011-06-14   6.570925
2011-06-15   0.015107
2011-06-16   0.031066
2011-06-17   0.073008
2011-06-18   0.072198
2011-06-19   0.044534
2011-06-20   0.240080
2011-06-01  62.254651
2011-06-11   7.301481
任何帮助都将不胜感激


`

这将使用numpy sum,如果sum中存在nan,它将返回nan

In [35]: s = Series(randn(100),index=date_range('20130101',periods=100))

In [36]: s.iloc[11] = np.nan

In [37]: s.resample('10D',how=lambda x: x.values.sum())
Out[37]: 
2013-01-01    6.910729
2013-01-11         NaN
2013-01-21   -1.592541
2013-01-31   -2.013012
2013-02-10    1.129273
2013-02-20   -2.054807
2013-03-02    4.669622
2013-03-12    3.489225
2013-03-22    0.390786
2013-04-01   -0.005655
dtype: float64

为了过滤掉那些有“南”的日子,我建议你这样做

noNaN_days_only = s.groupby(lambda x: x.date).filter(lambda x: ~x.isnull().any()

其中
s
是一个
DataFrame

问题:为什么在使用建议的数据进行重采样时会得到3个值?我得到了
2011-06-01
2011-06-11
2011-06-21
。熊猫0.12和主人。它是从哪里得到2011-06-21日期的?我想如果你关闭了class='left'if,它不会包含额外的数据点(右边是默认值)不,这是我尝试的第一件事。它看起来像一只虫子。因为即使我将最后一个时间戳更改为
2011-06-19 23:59:59
,它仍然会为
2011-06-21
提供第三个值;想做公关吗?还没有时间看这份公关报告吗?对不起:(不熟悉术语:)拉取请求?为该问题添加评论?这与s.dropna()有何不同?:)数据已经过日期采样。