您可以先使用map 对每一行应用一个函数,然后您可以选择其输出的第三个元素来获取纬度/经度。最后,您可以通过选择值0 和1 将此输出分别拆分为纬度和经度。假设您的数据框包含名为“折线”的列中的折线:
import polyline
polyline.decode('onl~Fj|cvOrsEg}@rHuvK')
df['lat/long'] = df['polyline'].map(lambda x: polyline.decode(x)[2])
df['lat'] = df['lat/long'].str[0]
df['long'] = df['lat/long'].str[1]
您也可以删除 lat/long 列,因为您拥有单独的值:
df = df.drop(columns='lat/long')
逐步演练,创建示例数据框并应用polyline.decode(x) 以获得所需的lat/long 值:
df = pd.DataFrame({'Col1':['A','B','C'],'Polyline':['onl~Fj|cvOrsEg}@rHuvK','onl~Fj|cvOrsEg}@rHuvK','onl~Fj|cvOrsEg}@rHuvK']})
df['lat/long'] = df['Polyline'].map(lambda x: polyline.decode(x)[2])
输出:
Col1 Polyline lat/long
0 A onl~Fj|cvOrsEg}@rHuvK (41.81268, -87.60439)
1 B onl~Fj|cvOrsEg}@rHuvK (41.81268, -87.60439)
2 C onl~Fj|cvOrsEg}@rHuvK (41.81268, -87.60439)
使用来自lat/long 的值创建lat 和long 列:
df['lat'] = df['lat/long'].str[0]
df['long'] = df['lat/long'].str[1]
输出:
Col1 Polyline lat/long lat long
0 A onl~Fj|cvOrsEg}@rHuvK (41.81268, -87.60439) 41.81268 -87.60439
1 B onl~Fj|cvOrsEg}@rHuvK (41.81268, -87.60439) 41.81268 -87.60439
2 C onl~Fj|cvOrsEg}@rHuvK (41.81268, -87.60439) 41.81268 -87.60439
最后删除lat/long列:
df = df.drop(columns='lat/long')
输出:
Col1 Polyline lat long
0 A onl~Fj|cvOrsEg}@rHuvK 41.81268 -87.60439
1 B onl~Fj|cvOrsEg}@rHuvK 41.81268 -87.60439
2 C onl~Fj|cvOrsEg}@rHuvK 41.81268 -87.60439