我有一个Pandas数据框(从.csv文件加载),其中日期时间是索引,每天应该有一个条目。问题在于我有空缺,即有些日期没有任何数据。最简单的方法是什么来在这些空缺中插入行(日期)?此外,是否有一种方法可以控制插入到列中的数据!比如0或复制前一天的信息,或者填充滑动递增/递减值,范围从前一日期向下一个日期数据值。
谢谢
这里有一个例子:01-03和01-04丢失了:
In [60]: df['2015-01-06':'2015-01-01']
Out[60]:
Rate High (est) Low (est)
Date
2015-01-06 1.19643 0.0000 0.0000
2015-01-05 1.20368 1.2186 1.1889
2015-01-02 1.21163 1.2254 1.1980
2015-01-01 1.21469 1.2282 1.2014
仍在试验,但这似乎解决了问题:
df.set_index(pd.DatetimeIndex(df.Date),inplace=True)
然后重新采样...原因是使用具有标题列名称"Date"的.csv文件实际上并没有创建日期时间索引,但是创建了冻结列表,不知道这是什么意思。
resample()方法期望: if isinstance(ax, DatetimeIndex): ......
这是我的最终解决方案:
#make dates the index
self.df.set_index(pd.DatetimeIndex(self.df.Date), inplace=True)
#fill the gaps
self.df = self.df.resample('D',fill_method='pad')
#fix the Date column
self.df.Date = self.df.index.values
我必须修复日期列,因为resample()只允许您填充它。
尽管如此,它可以正确地修复索引,因此我可以使用它来修复日期列。
以下是纠正后的数据片段:
2015-01-29 2015-01-29 1.13262 0.0000 0.0000
2015-01-30 2015-01-30 1.13161 1.1450 1.1184
2015-01-31 2015-01-31 1.13161 1.1450 1.1184
2015-02-01 2015-02-01 1.13161 1.1450 1.1184
01-30和01-31是新生成的数据。
pd.to_datetime
而不是 pd.DatetimeIndex 构造函数。df.index.names
是“索引标题”(列被标记为例如“Rate”,所以可以层次化地命名索引)。 - Andy Haydenparse_dates=True
可能会起到作用。 - Andy Haydenfill_method="pad"
已不再使用,请改用.resample(...).pad()
。 - Manto