我有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")
1条答案
按热度按时间aiazj4mn1#
您可以使用
limit_area='inside'
将插值限制为内部NaN(这在interpolate
的文档中有很好的介绍):产出: