【问题标题】:Reading a JSON file using pandas in a desired format使用 pandas 以所需格式读取 JSON 文件
【发布时间】:2021-10-30 17:34:05
【问题描述】:

我有一个 JSON 文件,其中包含:

{
    "getYearsListOverview": {
        "sp_name": "analytics.year_overview_drop_down",
        "sp_input_params": {
            "req_url_query_params": [],
            "req_body_params": []
        },
        "sp_output_datasets": [],
        "page_name": "home"
    },
    "getRankingsDataPerformanceReport": {
        "sp_name": "analytics.get_performance_ranking_data",
        "sp_input_params": {
            "req_url_query_params": [
                ["@scroll_index", "index"]
            ],
            "req_body_params": [
                ["@event_type_id", "event_type_id"],
                ["@season", "season"],
                ["@athlete_guid", "athlete_guid"]
            ]
        },
        "sp_output_datasets": [],
        "number_of_output_datasets_for_customized_template": 4,
        "customised_response_template": {
            "performance_value_list": [],
            "rankings_table": [],
            "level_values": []
        },
        "page_name": "performancereport"
    }
}

我希望将其转换为 pandas 数据框。数据框应具有以下列:

sp_name      
req_url_query_params  
req_body_params    
sp_output_datasets    
number_of_output_datasets_for_customized_template    
performance_value_list   
rankings_table    
level_values   
page_name

我正在使用以下代码sn-ps:

with open(os.path.join(filepath,json_file),'r',encoding="utf-8") as json_file:
  j_f = json.load(json_file)
df_1 = json_normalize(j_f)

但这给了我一个数据框,其列如下:

getYearsListOverview.sp_name    
getYearsListOverview.sp_input_params.req_url_query_params    
getYearsListOverview.sp_input_params.req_body_params

这些值是按照 JSON 填充的。

如何在此处获取所需的列名。 JSON 数据结构的微小变化是可以接受的。

【问题讨论】:

  • 这方面有什么帮助吗?

标签: python json pandas


【解决方案1】:

简单地重命名列

for col in df_1.columns:
    new_col_name = col.split('.')[-1]
    df_1.rename(columns = {col: new_col_name},inplace=True)
print(df_1.columns)

输出:

Index(['sp_name', 'req_url_query_params', 'req_body_params',
   'sp_output_datasets', 'page_name', 'sp_name', 'req_url_query_params',
   'req_body_params', 'sp_output_datasets',
   'number_of_output_datasets_for_customized_template',
   'performance_value_list', 'rankings_table', 'level_values',
   'page_name'],
  dtype='object')

因此,您的 JSON 文件有两个上层元素,其中包含相同的变量,当您从该 JSON 文件创建一个数据框时,这会在列命名中产生冲突。你可以做的就是将 JSON 对象一分为二。

dict0 = dict(list(j_f.items())[:1])
dict1 = dict(list(j_f.items())[1:])

然后再次转回数据帧

df_0 = pd.json_normalize(dict0)
df_1 = pd.json_normalize(dict1)

并单独工作。导致两个数据帧没有列冲突。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2021-06-30
    • 2019-08-26
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    相关资源
    最近更新 更多