python - 从 JSON 文件填充 pandas DataFrame
问题描述
我想遍历 JSON 文件并通过遍历 JSON 数据的特定键值来填充 pandas DataFrame。
import pandas as pd
json_data = [
{
"name" : "Brad Green",
"age" : "35",
"address" : {
"street" : "Nicol St. 16",
"city" : "Manhatan"
},
"children" : ["Nati", "Madi"]
},
{
"name" : "Sara Brown",
"age" : "30",
"address" : {
"street" : "Adam St. 66",
"city" : "New York"
},
"children" : "none"
}
]
我不想像json_data
下面的代码那样简单地将数据添加到 df 中:
df = pd.DataFrame(json_data, columns=['name', 'address', 'age'])
我写了一个 for 循环来遍历json_data
并将数据添加到df_new
:
df_new = pd.DataFrame(columns=['name','age','street','city'])
for i in range(len(json_data)):
df_new = df_new.append({"name": json_data[i]})
...
我知道这个 for 循环显然无法从中获取'name','age','street','city
值,json_data
但我无法通过查看此处的不同帖子来找到解决方案。另外,我想address
从这个嵌套键值分开的值中获取数据。如果有人可以帮助我解决这个问题,我将不胜感激。
解决方案
遍历 json 文件可能不是执行此 IMO 的最佳方法。pd.json_normalize
如果我是你,我会调查:
>>> df = pd.json_normalize(json_data)[['name', 'age', 'address.street', 'address.city']]
>>> df
name age address.street address.city
0 Brad Green 35 Nicol St. 16 Manhatan
1 Sara Brown 30 Adam St. 66 New York
您可以在此之后重命名您认为合适的列,例如
df.columns = ["name", "age", "street", "city"]
修复你的代码
我不推荐这种方法,但要解决您关于迭代 json 的具体问题:您可以使用以下方法获取数据框:
df_new = pd.DataFrame(columns=['name','age','street','city'])
for kv in json_data2:
df_new = df_new.append(
{
"name": kv.get("name", None),
"age": kv.get("age", None),
"street": kv.get("address", {}).get("street", None),
"city": kv.get("address", {}).get("city", None),
},
ignore_index=True
)
注意我使用.get()
的是默认值,None
因此如果您的 json 中有不一致的结构记录(例如缺少一个必需的键),这不会失败
推荐阅读
- java - Kibana 启用了您当前浏览器不符合的严格安全要求
- python - Python - 在 Windows 上获取实际文件名(使用正确的大小写)?
- elasticsearch - Jmeter对ElasticSearch的http请求中的三引号
- python - 进行价值选择的最快方法?
- python-3.x - python中sorted()函数背后的逻辑
- flutter - 在 Flutter 中使用 Dio 包下载多个文件
- flutter - 如何将 Flutter 应用设置为默认短信应用?
- javascript - 如何不对所有选择激活选择功能
- swift - 按钮stackView间距不起作用-Swift-以编程方式
- c# - 通过 lambdada 表达式在组中选择当前记录