Pandas 用新的长度插入数据框
Pandas Interpolate dataframe with new length
我有一个包含日期时间、纬度、经度、z 列的数据框。我正在从 csv 文件中读取数据,因此设置日期时间的时间段不起作用。时间间隔为 6 小时,但我想将数据线性插值到每小时间隔。
从
出发
'A' 'B' 'C' 'D'
0 2010-09-13 18:00:00 16.3 -78.5 1
1 2010-09-14 00:00:00 16.6 -79.8 6
2 2010-09-14 06:00:00 17.0 -81.1 12
到
'A' 'B' 'C' 'D'
1 2010-09-13 18:00:00 16.3 -78.5 1
2 2010-09-13 19:00:00 16.35 -78.7 2
3 2010-09-13 20:00:00 16.4 -78.9 3
4 2010-09-13 21:00:00 16.45 -79.1 4
5 2010-09-13 22:00:00 16.5 -79.3 5
....
我试过使用插值命令,但没有关于数据帧新长度的参数。
df.interpolate(method='linear')
我在想我可以使用 .loc 在数据帧的每行之间包含 5 行 NAN,然后使用插值函数,但这似乎是一个糟糕的解决方法。
解决方法
如果您的初始列未作为日期时间导入,则使用 DatetimeIndex 会消除与其他列的关联。
i = pd.DatetimeIndex(start=df['A'].min(), end=df['A'].max(), freq='H')
df = df.reindex(i).interpolate()
print(df)
给出正确答案。
i = pd.DatetimeIndex(start=df.index.min(), end=df.index.max(), freq='H')
df = df.reindex(i).interpolate()
print(df)
产出
2010-09-13 18:00:00 16.300000 -78.500000
2010-09-13 19:00:00 16.350000 -78.716667
2010-09-13 20:00:00 16.400000 -78.933333
2010-09-13 21:00:00 16.450000 -79.150000
2010-09-13 22:00:00 16.500000 -79.366667
我有一个包含日期时间、纬度、经度、z 列的数据框。我正在从 csv 文件中读取数据,因此设置日期时间的时间段不起作用。时间间隔为 6 小时,但我想将数据线性插值到每小时间隔。
从
出发 'A' 'B' 'C' 'D'
0 2010-09-13 18:00:00 16.3 -78.5 1
1 2010-09-14 00:00:00 16.6 -79.8 6
2 2010-09-14 06:00:00 17.0 -81.1 12
到
'A' 'B' 'C' 'D'
1 2010-09-13 18:00:00 16.3 -78.5 1
2 2010-09-13 19:00:00 16.35 -78.7 2
3 2010-09-13 20:00:00 16.4 -78.9 3
4 2010-09-13 21:00:00 16.45 -79.1 4
5 2010-09-13 22:00:00 16.5 -79.3 5
....
我试过使用插值命令,但没有关于数据帧新长度的参数。
df.interpolate(method='linear')
我在想我可以使用 .loc 在数据帧的每行之间包含 5 行 NAN,然后使用插值函数,但这似乎是一个糟糕的解决方法。
解决方法 如果您的初始列未作为日期时间导入,则使用 DatetimeIndex 会消除与其他列的关联。
i = pd.DatetimeIndex(start=df['A'].min(), end=df['A'].max(), freq='H')
df = df.reindex(i).interpolate()
print(df)
给出正确答案。
i = pd.DatetimeIndex(start=df.index.min(), end=df.index.max(), freq='H')
df = df.reindex(i).interpolate()
print(df)
产出
2010-09-13 18:00:00 16.300000 -78.500000
2010-09-13 19:00:00 16.350000 -78.716667
2010-09-13 20:00:00 16.400000 -78.933333
2010-09-13 21:00:00 16.450000 -79.150000
2010-09-13 22:00:00 16.500000 -79.366667