我正在使用pandas将存储在data_m
中的日内数据转换为每日数据。出于某种原因,resample
添加了日内数据中不存在的行数。例如,1/8/2000不在日内数据中,但每日数据包含该日期的行,其中NaN为值。 DatetimeIndex具有比实际数据更多的条目。我做错了吗?
data_m.resample('D', how = mean).head()
Out[13]:
x
2000-01-04 8803.879581
2000-01-05 8765.036649
2000-01-06 8893.156250
2000-01-07 8780.037433
2000-01-08 NaN
data_m.resample('D', how = mean)
Out[14]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 4729 entries, 2000-01-04 00:00:00 to 2012-12-14 00:00:00
Freq: D
Data columns:
x 3241 non-null values
dtypes: float64(1)
答案 0 :(得分:5)
你正在做的事情看起来是正确的,只是pandas给出了NaN的空数列的平均值。
In [1]: Series().mean()
Out[1]: nan
resample
转换为常规时间间隔,因此如果当天没有样本,则会获得NaN。
大多数时间使用NaN不是问题。如果是,我们可以使用fill_method
(例如'ffill'
),或者如果您真的想删除它们,可以使用dropna
(不推荐):
data_m.resample('D', how = mean, fill_method='ffill')
data_m.resample('D', how = mean).dropna()
更新:现代等价物似乎是:
In [21]: s.resample("D").mean().ffill()
Out[21]:
x
2000-01-04 8803.879581
2000-01-05 8765.036649
2000-01-06 8893.156250
2000-01-07 8780.037433
2000-01-08 8780.037433
In [22]: s.resample("D").mean().dropna()
Out[22]:
x
2000-01-04 8803.879581
2000-01-05 8765.036649
2000-01-06 8893.156250
2000-01-07 8780.037433
请参阅resample docs。
答案 1 :(得分:1)
在0.10.0之前,pandas标记了具有最右边缘的重采样箱,用于每日重新采样,是第二天。从0.10.0开始,每日和更高频率的默认分箱行为更改为label='left', closed='left'
,以最大限度地减少这种混淆。有关详细信息,请参阅http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#api-changes。