Python pandas重新取样添加了原始数据中没有的日期[英] Python pandas resample added dates not present in the original data

本文是小编为大家收集整理的关于Python pandas重新取样添加了原始数据中没有的日期的处理方法,想解了Python pandas重新取样添加了原始数据中没有的日期的问题怎么解决?Python pandas重新取样添加了原始数据中没有的日期问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用 pandas 将存储在 data_m 中的日内数据转换为每日数据.出于某种原因,resample 为日内数据中不存在的日期添加了行.例如,2000 年 1 月 8 日不在日内数据中,但每日数据包含该日期的一行,其值为 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)

推荐答案

你所做的看起来是正确的,只是 pandas 给出了一个空数组的平均值.

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

请参阅重新采样文档.

本文地址:https://www.itbaoku.cn/post/1728114.html