首页 > 解决方案 > 从 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从这个嵌套键值分开的值中获取数据。如果有人可以帮助我解决这个问题,我将不胜感激。

标签: pythonjsonpandas

解决方案


遍历 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 中有不一致的结构记录(例如缺少一个必需的键),这不会失败


推荐阅读