Python 添加缺少的行并插值它们的值

Python 添加缺少的行并插值它们的值,python,pandas,interpolation,Python,Pandas,Interpolation,我正在使用以下数据帧 altitude density east_wind north_wind 0 5 0.020567 39.714397 6.795392 1 7 0.016871 41.171996 6.852655 2 9 0.013839 42.629594 6.909918 3 11 0.011351 44.087193 6.967182 4 13 0.009311 45.544791

我正在使用以下数据帧

altitude    density east_wind   north_wind
0   5   0.020567    39.714397   6.795392
1   7   0.016871    41.171996   6.852655
2   9   0.013839    42.629594   6.909918
3   11  0.011351    44.087193   6.967182
4   13  0.009311    45.544791   7.024445
我希望在
高度中有一个连续的值,而不仅仅是奇数,然后使用SciPy的
.interpolate(method='linear')
填充缺少的值,并将插值扩展到
高度
20

预期产出

altitude    density east_wind   north_wind
0   5   0.020567    39.714397   6.795392
1   6   0.018871    41.171996   6.852655
2   7   0.015839    42.629594   6.909918
3   8   0.013351    44.087193   6.967182
4   9   0.010311    45.544791   7.024445
...
...
9   19  0.000351    50.087193   11.967182
10  20  0.000311    51.544791   12.024445

请告知

熊猫的内插相对容易,外推则稍难。所以我们“作弊”并手动计算海拔=21行,然后调用
reindex
插值

首先,我们加载数据

from io import StringIO
data = StringIO(
"""
altitude    density east_wind   north_wind
0   5   0.020567    39.714397   6.795392
1   7   0.016871    41.171996   6.852655
2   9   0.013839    42.629594   6.909918
3   11  0.011351    44.087193   6.967182
4   13  0.009311    45.544791   7.024445
""")
df = pd.read_csv(data, sep='\s+', index_col=0)
df
然后

得到

      altitude    density    east_wind    north_wind
--  ----------  ---------  -----------  ------------
 0           5   0.020567      39.7144       6.79539
 1           6   0.018719      40.4432       6.82402
 2           7   0.016871      41.172        6.85266
 3           8   0.015355      41.9008       6.88129
 4           9   0.013839      42.6296       6.90992
 5          10   0.012595      43.3584       6.93855
 6          11   0.011351      44.0872       6.96718
 7          12   0.010331      44.816        6.99581
 8          13   0.009311      45.5448       7.02445
 9          14   0.008291      46.2736       7.05308
10          15   0.007271      47.0024       7.08171
11          16   0.006251      47.7312       7.11034
12          17   0.005231      48.46         7.13897
13          18   0.004211      49.1888       7.1676
14          19   0.003191      49.9176       7.19623
15          20   0.002171      50.6464       7.22487
16          21   0.001151      51.3752       7.2535

我尝试实现了您的代码,但它产生了一个错误
ValueError:cannot reindex from a replicate axis
hmm。我编辑了我的答案,显示了我如何加载数据——如果您完全按照我的步骤(包括数据加载)进行操作,它会工作吗?在你的原始测向中,“高度”的数据类型是什么?我试过你的代码,插值部分工作得很好,但是外推会导致一些不合理的值,这些值与趋势不一致。有没有其他方法来进行推断?我的观点是,你通常不能仅仅线性地推断你的数据那么远,然后期待一个合理的答案。虽然上面的代码满足了您的要求,但它可能不是您真正需要的
      altitude    density    east_wind    north_wind
--  ----------  ---------  -----------  ------------
 0           5   0.020567      39.7144       6.79539
 1           6   0.018719      40.4432       6.82402
 2           7   0.016871      41.172        6.85266
 3           8   0.015355      41.9008       6.88129
 4           9   0.013839      42.6296       6.90992
 5          10   0.012595      43.3584       6.93855
 6          11   0.011351      44.0872       6.96718
 7          12   0.010331      44.816        6.99581
 8          13   0.009311      45.5448       7.02445
 9          14   0.008291      46.2736       7.05308
10          15   0.007271      47.0024       7.08171
11          16   0.006251      47.7312       7.11034
12          17   0.005231      48.46         7.13897
13          18   0.004211      49.1888       7.1676
14          19   0.003191      49.9176       7.19623
15          20   0.002171      50.6464       7.22487
16          21   0.001151      51.3752       7.2535