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