我正在尝试从每天到每小时的频率上采样我的数据,并向前填充丢失的数据。
我从以下代码开始:
df1 = pd.read_csv("DATA.csv")
df1.head(5)
然后我使用以下代码转换为日期时间字符串,并将日期/时间设置为索引:
df1['DT'] = pd.to_datetime(df1['DT']).dt.strftime('%Y-%m-%d %H:%M:%S')
df1.set_index('DT')
我尝试每小时重新采样一次,如下所示:
df1['DT'] = df1.resample('H').ffill()
但是出现以下错误:
TypeError:仅与DatetimeIndex,TimedeltaIndex或 PeriodIndex,但有一个'RangeIndex'实例
我认为我的dtype已经是上面pd.to_datetime代码所指示的日期时间。我尝试的一切似乎都没有效果。谁能帮我吗?
我的预期输出如下:
DT VALUE
2016-08-01 00:00:00 0.000000
2016-08-01 01:00:00 0.000000
2016-08-01 02:00:00 0.000000
等
文件本身大约有1000行。前50列左右为零,以澄清实际数据在哪里:
DT VALUE
2018-12-13 00:00:00 24000.000000
2018-12-13 01:00:00 24000.000000
2018-12-13 02:00:00 24000.000000
...
2018-12-13 23:00:00 24000.000000
2018-12-14 00:00:00 26000.000000
2018-12-14 01:00:00 26000.000000
等
答案 0 :(得分:0)
尝试将其分配回
df1=df1.set_index('DT')
或
df1.set_index('DT',inplace=True)
答案 1 :(得分:0)
我假设您提到过数据集的一些初始行,
module.exports = mongoose.model('Company', CompanySchema);
module.exports = mongoose.model('CompanyWarehouses', CompanyWarehouses);
然后像这样在 DT VALUE
0 2016-08-01 0
1 2016-08-02 0
2 2016-08-03 0
3 2016-08-04 0
4 2016-08-05 0
5 2016-08-06 0
6 2016-08-07 0
7 2016-08-08 0
8 2016-08-09 0
上建立索引,
DT
输出:
df = df.set_index('DT')
df
现在,重新采样数据框,
VALUE
DT
2016-08-01 0
2016-08-02 0
2016-08-03 0
2016-08-04 0
2016-08-05 0
2016-08-06 0
2016-08-07 0
2016-08-08 0
2016-08-09 0
输出:显示输出的一些初始值,
df = df.resample('H').ffill()
df
答案 2 :(得分:0)
您可以将索引转换为pd.DatetimeIndex
,然后对其重新采样。我也不认为您需要(或想要)strftime()
通话:
df1 = pd.read_csv("DATA.csv")
df1['DT'] = pd.to_datetime(df1['DT'])
df1.set_index('DT')
df1.index = pd.DatetimeIndex(df1.index)
df1['DT'] = df1.resample('H').ffill()
注意:您可能可以将其中的一些结合起来,但仍然很清楚,例如:
df1 = pd.read_csv("DATA.csv")
df1.index = pd.DatetimeIndex(pd.to_datetime(df1['DT']))
df1['DT'] = df1.resample('H').ffill()