如何使用 Pandas 对数据帧的前几行进行插值?
How do I use Pandas to interpolate on the first few rows of a dataframe?
我有一些未填充行的天体物理学数据,我正在尝试使用 Pandas Interpolate 方法来填充这些数据。它适用于 np.NaN 值,但前三行除外。它填充值,但不是线性填充,它只是放置在第四行的值中。数据帧的第一个块(称为 avgdf_final)如下所示:
day lon lat rad
nums
0 319.0 NaN NaN NaN
1 320.0 NaN NaN NaN
2 321.0 NaN NaN NaN
3 322.0 56.485 2.7800 1.158
4 323.0 43.300 2.6800 1.166
5 324.0 30.100 2.5775 1.174
我试过这个(有大约一百万个不同的小变化)无济于事:
avgdf_final.interpolate(limit_direction='backward')
每次,我都会得到这样的结果:
day lon lat rad
nums
0 319.0 56.485 2.7800 1.158
1 320.0 56.485 2.7800 1.158
2 321.0 56.485 2.7800 1.158
3 322.0 56.485 2.7800 1.158
4 323.0 43.300 2.6800 1.166
5 324.0 30.100 2.5775 1.174
很明显,这不是插值:它只是再次粘贴了相同的行。我该怎么做才能完成这项工作?预先感谢您的任何回复!!
“线性”插值需要在数据之间进行,这里不是这种情况(您宁愿额外插值)。
您可以尝试使用样条曲线:
df2 = df.interpolate(method='spline', limit_direction='backward', order=1)
有关其他方法,请参阅 interpolate
文档。
输出:
day lon lat rad
0 319.0 96.0650 3.084167 1.134
1 320.0 82.8725 2.982917 1.142
2 321.0 69.6800 2.881667 1.150
3 322.0 56.4850 2.780000 1.158
4 323.0 43.3000 2.680000 1.166
5 324.0 30.1000 2.577500 1.174
我有一些未填充行的天体物理学数据,我正在尝试使用 Pandas Interpolate 方法来填充这些数据。它适用于 np.NaN 值,但前三行除外。它填充值,但不是线性填充,它只是放置在第四行的值中。数据帧的第一个块(称为 avgdf_final)如下所示:
day lon lat rad
nums
0 319.0 NaN NaN NaN
1 320.0 NaN NaN NaN
2 321.0 NaN NaN NaN
3 322.0 56.485 2.7800 1.158
4 323.0 43.300 2.6800 1.166
5 324.0 30.100 2.5775 1.174
我试过这个(有大约一百万个不同的小变化)无济于事:
avgdf_final.interpolate(limit_direction='backward')
每次,我都会得到这样的结果:
day lon lat rad
nums
0 319.0 56.485 2.7800 1.158
1 320.0 56.485 2.7800 1.158
2 321.0 56.485 2.7800 1.158
3 322.0 56.485 2.7800 1.158
4 323.0 43.300 2.6800 1.166
5 324.0 30.100 2.5775 1.174
很明显,这不是插值:它只是再次粘贴了相同的行。我该怎么做才能完成这项工作?预先感谢您的任何回复!!
“线性”插值需要在数据之间进行,这里不是这种情况(您宁愿额外插值)。
您可以尝试使用样条曲线:
df2 = df.interpolate(method='spline', limit_direction='backward', order=1)
有关其他方法,请参阅 interpolate
文档。
输出:
day lon lat rad
0 319.0 96.0650 3.084167 1.134
1 320.0 82.8725 2.982917 1.142
2 321.0 69.6800 2.881667 1.150
3 322.0 56.4850 2.780000 1.158
4 323.0 43.3000 2.680000 1.166
5 324.0 30.1000 2.577500 1.174