python - 将嵌套的 Json 信息提取到新列中
问题描述
我有一个格式如下的数据框,其中包含来自 Google Places 的信息:
geometry place_id
0 {'location': {'lat': 19.41, 'lng': -99.16},'viewport':{...}} ChIJ72ctQ0D_0YURyVYdfRzImGU
1 {'location': {'lat': 19.42, 'lng': -99.17},'viewport':{...}} ChIJ11QtkkX_0YUR5EK4tQCqY3A
2 {'location': {'lat': 19.43, 'lng': -99.18},'viewport':{...}} TEST ChIJBUve6UX_0YURCRM4GwUtwsc
3 {'location': {'lat': 19.44, 'lng': -99.16},'viewport':{...}} ChIJQYvciNX90YURv1n4r_l0wvo
4 {'location': {'lat': 19.45, 'lng': -99.16},'viewport':{...}} ChIJkZX8gz__0YURSxUrmMO6JLQ
我想要做的是,对于数据框中的每一行,获取其 lat 和 lng vlaues 并将它们设置为新列,以便数据框看起来像这样:
lat lng geometry place_id
0 19.41 -99.16 {'location': {'lat': 19.41, 'lng': -99.16},'viewport':{...}} ChIJ72ctQ0D_0YURyVYdfRzImGU
1 19.42 -99.17 {'location': {'lat': 19.42, 'lng': -99.17},'viewport':{...}} ChIJ11QtkkX_0YUR5EK4tQCqY3A
2 19.43 -99.18 {'location': {'lat': 19.43, 'lng': -99.18},'viewport':{...}} TEST ChIJBUve6UX_0YURCRM4GwUtwsc
3 19.44 -99.16 {'location': {'lat': 19.44, 'lng': -99.16},'viewport':{...}} ChIJQYvciNX90YURv1n4r_l0wvo
4 19.45 -99.16 {'location': {'lat': 19.45, 'lng': -99.16},'viewport':{...}} ChIJkZX8gz__0YURSxUrmMO6JLQ
不知道该怎么做...我尝试过奇怪的东西,例如 df['latitude'] = df[['geometry']]['location']['lat'],但这不起作用。我确定一定有一个我不熟悉的优雅解决方案......有什么建议吗?
解决方案
更改从 JSON 文件中提取数据的方式。
df1 = pd.json_normalize(jsonfile, record_path=['location'], meta=['place_id'])
df2 = pd.json_normalize(jsonfile)
pd.merge(df1, df2 on='place_id')
推荐阅读
- python - Python对象到JSON,但只有选定的属性
- python - 带有 plotly 的堆积条形图
- flutter - Flutter navigator push in initstate 进入循环
- python - 使用 Pandas Dataframe 获得意外输出
- arrays - Flutter 2D 游戏图形
- c - 交换序列中的最小和最大数字(C语言)
- python - 如何使用joblib并行写入文件?JoinableQueue 问题
- php - 如何在laravel的同一视图文件中获取url中参数的值
- php - 预期响应代码为 250,但得到代码“550”,使用 Laravel 7 和 SendGrid 显示消息“550 未经身份验证的发件人不允许”
- reflection - 使用 F# 反射将两个对象与默认 IComparable 实现进行比较