我有Pandas DataFrame(从.csv加载),日期时间作为索引..每天有/必须有一个条目。 问题是我有空隙,即有几天我根本没有数据。 插入行(天)的最简单方法是什么?还有一种方法可以控制将数据插入列中作为数据!说0或复制prev day info或填充从prev-date到next-date数据值范围内的滑动增加/减少值。熊猫数据框的填充日期间隙
感谢
我这里是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)
和然后重新采样...原因是导入带有header-col-name Date的.csv实际上并不是创建日期时间索引,但冻结列表无论如何。 重采样()期待:如果isinstance(斧,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
我不得不修复的日期列,因为重采样()只是让你去填充它。 虽然它修正了索引,所以我可以用它来修复日期列。
在这里被修正后剪断的数据的:
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是新生成的数据。
df.index应该是'DatetimeIndex',我推荐使用'pd.to_datetime'而不是pd.DatetimeIndex构造函数。 'df.index.names'是“索引标题”(列标记,例如“Rate”,索引的级别也是如此)。 – 2015-02-12 01:41:12
我可以在cvs导入时做到这一点(pd.read_csv()) – user1019129 2015-02-12 02:35:52
是的,'parse_dates = True'可以做到这一点。 – 2015-02-12 05:45:13