pandas 在第一个和最后一个有效值之间进行插值,然后用零填充Nan值,用于嵌套式列

0s7z1bwu  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(123)

我有CSV文件如下表所示:
| 深度|X1| X2| X3|
| --|--|--|--|
| 深度|X1| X2| X3|
| 1000 |楠|楠|楠|
| 1001 |楠|楠|楠|
| 1002 |楠|楠|楠|
| 1003 |楠| 10 |楠|
| 1004 |楠|楠|楠|
| 1005 |楠|楠| 10 |
| 1006 |楠|楠|楠|
| 1007 | 10 |楠|楠|
| 1008 | 11 |楠|楠|
| 1009 | 12 |楠|楠|
| 1010 | 13 |楠|楠|
| 1011 | 14 |楠| 15 |
| 1012 | 15 | 20 |楠|
| 1013 |楠|楠|楠|
| 1014 |楠|楠|楠|
| 1015 | 18 |楠|楠|
| 1016 | 19 |楠|楠|
| 1017 | 20 |楠|楠|
| 1018 | 21 |楠| 20 |
| 1019 | 22 |楠|楠|
| 1020 | 23 |楠|楠|
| 1021 | 24 | 25 |楠|
| 1022 | 25 |楠|楠|
| 1023 | 26 |楠|楠|
| 1024 | 27 |楠| 25 |
| 1025 | 28 | 15 |楠|
| 1026 |楠|楠|楠|
| 1027 |楠|楠|楠|
| 1028 |楠|楠|楠|
我想在第一个和最后一个有效值之间插值,然后用零填充Nan值,结果应该是这样的
| 深度|X1| X2| X3|
| --|--|--|--|
| 1000 | 0 | 0 | 0 |
| 1001 | 0 | 0 | 0 |
| 1002 | 0 | 0 | 0 |
| 1003 | 0 | 10 | 0 |
| 1004 | 0 |11.1111111| 0 |
| 1005 | 0 |12.2222222| 10 |
| 1006 | 0 |13.3333333| 10.8333333|
| 1007 | 10 |14.4444444| 11.6666667|
| 1008 | 11 |15.5555556|十二点五|
| 1009 | 12 |16.6666667| 13.3333333|
| 1010 | 13 |17.7777778| 14.1666667|
| 1011 | 14 |18.8888889| 15 |
| 1012 | 15 | 20 |15.71428571|
| 1013 | 16 |20.5555556| 16.42857143|
| 1014 | 17 |21.1111111| 17.14285714|
| 1015 | 18 |21.6666667| 17.85714286|
| 1016 | 19 |22.2222222| 18.57142857|
| 1017 | 20 |22.7777778| 19.28571429|
| 1018 | 21 |23.3333333| 20 |
| 1019 | 22 |23.8888889| 20.8333333|
| 1020 | 23 |24.4444444| 21.6666667|
| 1021 | 24 | 25 |二十二点五|
| 1022 | 25 |二十二点五|23.3333333|
| 1023 | 26 | 20 |24.1666667|
| 1024 | 27 |十七点五| 25 |
| 1025 | 28 | 15 | 25 |
| 1026 | 28 | 0 | 0 |
| 1027 | 28 | 0 | 0 |
| 1028 | 28 | 0 | 0 |
我已经尝试了下面的代码,但它不给予正确的结果

import pandas as pd
df = pd.read_csv(r"C:\Users\mohamed\OneDrive\Desktop\test_interpolate.csv")
df = df.interpolate()
df = df.fillna(0)
print (df)
df.to_csv(r"C:\Users\mohamed\OneDrive\Desktop\result.csv")
aiazj4mn

aiazj4mn1#

您可以使用limit_area='inside'将插值限制为内部NaN(这在interpolate的文档中有很好的介绍):

df = df.interpolate(limit_area='inside').fillna(0)

产出:

depth    x1         x2         x3
0    1000   0.0   0.000000   0.000000
1    1001   0.0   0.000000   0.000000
2    1002   0.0   0.000000   0.000000
3    1003   0.0  10.000000   0.000000
4    1004   0.0  11.111111   0.000000
5    1005   0.0  12.222222  10.000000
6    1006   0.0  13.333333  10.833333
7    1007  10.0  14.444444  11.666667
8    1008  11.0  15.555556  12.500000
9    1009  12.0  16.666667  13.333333
10   1010  13.0  17.777778  14.166667
11   1011  14.0  18.888889  15.000000
12   1012  15.0  20.000000  15.714286
13   1013  16.0  20.555556  16.428571
14   1014  17.0  21.111111  17.142857
15   1015  18.0  21.666667  17.857143
16   1016  19.0  22.222222  18.571429
17   1017  20.0  22.777778  19.285714
18   1018  21.0  23.333333  20.000000
19   1019  22.0  23.888889  20.833333
20   1020  23.0  24.444444  21.666667
21   1021  24.0  25.000000  22.500000
22   1022  25.0  22.500000  23.333333
23   1023  26.0  20.000000  24.166667
24   1024  27.0  17.500000  25.000000
25   1025  28.0  15.000000   0.000000
26   1026   0.0   0.000000   0.000000
27   1027   0.0   0.000000   0.000000
28   1028   0.0   0.000000   0.000000

相关问题