Python:使用ffill()将数据帧从每日数据向每小时数据上采样
我正在尝试将我的数据从每日频率增加到每小时频率,并向前填充缺失的数据 我从以下代码开始:Python:使用ffill()将数据帧从每日数据向每小时数据上采样,python,pandas,Python,Pandas,我正在尝试将我的数据从每日频率增加到每小时频率,并向前填充缺失的数据 我从以下代码开始: df1 = pd.read_csv("DATA.csv") df1.head(5) 然后,我使用以下命令转换为datetime字符串,并将日期/时间设置为索引: df1['DT'] = pd.to_datetime(df1['DT']).dt.strftime('%Y-%m-%d %H:%M:%S') df1.set_index('DT') 我尝试按如下方式每小时重新采样: df1['DT']
df1 = pd.read_csv("DATA.csv")
df1.head(5)
然后,我使用以下命令转换为datetime字符串,并将日期/时间设置为索引:
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()
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
但我得到了以下错误:
TypeError:仅对DatetimeIndex、TimedeltaIndex或
PeriodIndex,但获得了“RangeIndex”的实例
我认为我的数据类型已经是上面pd.to_datetime代码指示的日期时间。我尝试的东西似乎都没用。有人能帮我吗
我的预期产出如下:
df1['DT'] = df1.resample('H').ffill()
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
等等。尝试重新分配
df1=df1.set_index('DT')
或
我假设数据集的一些初始行如您所述
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
输出:显示输出的一些初始值
VALUE
DT
2016-08-01 00:00:00 0
2016-08-01 01:00:00 0
2016-08-01 02:00:00 0
2016-08-01 03:00:00 0
2016-08-01 04:00:00 0
2016-08-01 05:00:00 0
2016-08-01 06:00:00 0
2016-08-01 07:00:00 0
2016-08-01 08:00:00 0
2016-08-01 09:00:00 0
2016-08-01 10:00:00 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()
嗨,W-B,谢谢你的回答。我尝试了这个方法,但不幸的是,我仍然收到相同的错误。df1.VALUE.resample('H').ffill()是否有错误@GJBI现在获取问题AttributeError:'DataFrame'对象没有属性'VALUE'我的错误,我犯了一个错误:TypeError:仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但是得到了一个“RangeIndex”的实例,并提到了您的预期输出。@AbdurRehman谢谢您的评论,我已经更新了原始内容。在数据上提到列名称以使其更清晰。您的实际数据为2018年,预期数据为2016年。输入正确还是错误?谢谢Abdur,我已经更新了列名。大约有3年的数据,前面大多是零。我已经在问题中澄清了。@GJB让我知道这对您有效,或者您有任何其他疑问。您好Abdur,我得到了以下错误:索引必须是单调递增或递减的。我发现了错误-数据的末尾有一个错误NaN。非常感谢Abdur。