Python Pandas-通过插值填充缺失的lat long Cordinate
使用数据帧,如下所示Python Pandas-通过插值填充缺失的lat long Cordinate,python,pandas,interpolation,latitude-longitude,Python,Pandas,Interpolation,Latitude Longitude,使用数据帧,如下所示 Time Lat Long 19:24:52.135 35.61067 139.630228 19:24:52.183 NaN NaN 19:24:52.281 NaN NaN 19:24:52.378 NaN NaN 19:24:52.466 35.610692 139.630428 需要填写Lat和Long字段的NaN值,以便每行具有Lat/Long的NaN值时取以下值: 它们落在下一个(比如x2,y2)和下一个之间
Time Lat Long
19:24:52.135 35.61067 139.630228
19:24:52.183 NaN NaN
19:24:52.281 NaN NaN
19:24:52.378 NaN NaN
19:24:52.466 35.610692 139.630428
需要填写Lat
和Long
字段的NaN
值,以便每行具有Lat/Long的NaN值时取以下值:
df['Lat_shift'] = df['Lat'].shift()
df['Lat_shift'] = df['Lat_shift'].fillna(method='ffill')
df
Lat Long Lat_shift
0 35.610690 139.630428 NaN
1 NaN NaN 35.61069
2 NaN NaN 35.61069
3 NaN NaN 35.61069
4 35.610692 139.630428 35.61069
现在我们可以计算我们想要的任何指标:
df['Lat_new'] = df['Lat_shift'] + (df['Lat'] - df['Lat_shift'])/2
Lat Long Lat_shift Lat_new
0 35.610690 139.630428 NaN NaN
1 NaN NaN 35.61069 NaN
2 NaN NaN 35.61069 NaN
3 NaN NaN 35.61069 NaN
4 35.610692 139.630428 35.61069 35.610691
并使用它填充nan值:
df.loc[pd.isnull(df['Lat']), 'Lat'] = df['Lat_new'].fillna(method='bfill')
df.drop(columns=['Lat_shift', 'Lat_new'])
Lat Long
0 35.610690 139.630428
1 35.610691 NaN
2 35.610691 NaN
3 35.610691 NaN
4 35.610692 139.630428
我希望它能有所帮助:)按照评论中的建议进行尝试-效果不错
(Pdb) df["Long"].interpolate(method='linear')
0 139.630228
1 139.630278
2 139.630328
3 139.630378
4 139.630428
Name: Long, dtype: float64
(Pdb) df["Long"].interpolate()
0 139.630228
1 139.630278
2 139.630328
3 139.630378
4 139.630428
Name: Long, dtype: float64
在这种情况下,一个简单的函数可以工作吗..?或者
df.ffill()
?阅读更多我相信@Chris idea应该会起作用,但请记住,您可能需要处理180和90坐标附近的缠绕:)
(Pdb) df["Long"].interpolate(method='linear')
0 139.630228
1 139.630278
2 139.630328
3 139.630378
4 139.630428
Name: Long, dtype: float64
(Pdb) df["Long"].interpolate()
0 139.630228
1 139.630278
2 139.630328
3 139.630378
4 139.630428
Name: Long, dtype: float64