Pandas 使用新长度对数据框进行插值

Ben*_*enT 5 python linear-interpolation pandas

我有一个包含日期时间、纬度、经度、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
Run Code Online (Sandbox Code Playgroud)

       '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
....
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用 interpolate 命令,但没有关于数据帧新长度的参数。

df.interpolate(method='linear')
Run Code Online (Sandbox Code Playgroud)

我在想我可以使用 .loc 在数据帧的每行之间包含 5 行 NAN,然后使用插值函数,但这似乎是一个糟糕的解决方法。

解决方案 使用DatetimeIndex消除了与其他列的关联,如果您最初的列并没有被导入为日期时间。

i = pd.DatetimeIndex(start=df['A'].min(), end=df['A'].max(),    freq='H')
df = df.reindex(i).interpolate()
print(df)
Run Code Online (Sandbox Code Playgroud)

给出正确答案。

Ale*_*lex 6

i = pd.DatetimeIndex(start=df.index.min(), end=df.index.max(), freq='H')
df = df.reindex(i).interpolate()
print(df)
Run Code Online (Sandbox Code Playgroud)

输出

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
Run Code Online (Sandbox Code Playgroud)
  1. DatetimeIndex使用( docs )创建具有所需频率的新索引。

  2. reindex文档)使用这个新索引。默认情况下,新索引的值为np.nan

  3. interpolate(文档) 来填写这些缺失值。您可以提供methodkwarg 来确定插值的完成方式。