如何从键中提取经度和经度?
Posted
技术标签:
【中文标题】如何从键中提取经度和经度?【英文标题】:How to extract longitude and langitude from keys? 【发布时间】:2022-01-23 15:08:59 【问题描述】:我的数据框有以下设置:
df = pd.DataFrame(
data='place_id': ['AXRT'],
'geometry': ['location': 'lat': 51.112278, 'lng': 20.747889,
'viewport': 'northeast': 'lat': 51.11367217989272,
'lng': 20.74911952989272,
'southwest': 'lat': 51.11097252010727,
'lng': 20.74641987010727])
现在我试图在列中包含place_id
、lat
和lng
。
我的代码是:
out = df[['place_id']].join(df['geometry'].apply(pd.Series)['location'].apply(pd.Series))
但不幸的是,什么都没有发生。我还有我的核心专栏,包括整个"geometry"
。
【问题讨论】:
我已经尝试过你上面的代码并且它有效。请看输出:ibb.co/nPt26H6 感谢杰。不幸的是,由于某种原因,它不适用于以下链接下我更大的数据框:docs.google.com/spreadsheets/d/… 我真的不明白,虽然从不同的角度尝试过-:) 我收到一个错误:KeyError: 'location' 我明白了。请看我的回答。 【参考方案1】:与使用pd.DataFrame()
创建数据框不同,当您从文件中读取数据时,df['geometry']
包含dict
的字符串表示形式。
例如
"'location': 'lat': 51.112278, 'lng': 20.747889, 'viewport': '东北':'纬度':51.11367217989272,'lng':20.74911952989272, '西南': 'lat': 51.11097252010727, 'lng': 20.74641987010727"
因此,您需要使用ast.literal_eval()
将其转换为dict
。
import ast
df['geometry'] = df['geometry'].apply(lambda x : ast.literal_eval(x))
out = df[['place_id']].join(df['geometry'].apply(pd.Series)['location'].apply(pd.Series))
输出:
> place_id lat lng > 0 ChIJ3-pjozg3GEcRimBdVlmWd3k 51.112278 20.747889 > 1 ChIJiR-APhQ3GEcR-57__9ZfvU0 51.131246 20.763574 > 2 ChIJNyAvWs05GEcRVljgfRAvPGY 51.106695 20.793692 > 3 ChIJPQWT5Lo5GEcR_czWyMwzGMg 51.112206 20.830048 > 4 ChIJI2kwRsE5GEcRUJfB6O2QWa0 51.102545 20.785231 > 5 ChIJNyxWu7k5GEcRUhZfdmNctD8 51.113777 20.823140 > 6 ChIJjeNBPls3GEcR_hfosXw5KAQ 51.100790 20.751682 > 7 ChIJp2Mxm2E5GEcReEsSfRqfunM 51.098479 20.836110 > 8 ChIJ3aRDzrE5GEcR-hMBvF46sIQ 51.116702 20.835246
【讨论】:
非常感谢!现在像魅力一样工作-:) @Jaroslaw 欢迎您,伙计以上是关于如何从键中提取经度和经度?的主要内容,如果未能解决你的问题,请参考以下文章