在pandas中转换json文件

ncgqoxb0  于 2023-10-14  发布在  其他
关注(0)|答案(4)|浏览(131)

我想把一个json文件转换成一个JavaScript框架,但我得到了错误:ValueError:将dicts与非Series混合使用可能会导致排序不明确。有人能帮帮我吗?
json文件如下:

{
    "testCaseResult": {
        "timestamp": 1696257561,
        "testCaseStatus": "Failed",
        "result": "Found nullCount=2. It should be 0",
        "testResultValue": [
            {
                "name": "nullCount",
                "value": "2"
            }
        ],
        "testCaseFailureStatus": {
            "testCaseFailureStatusType": "New",
            "updatedAt": 1696257581779
        }
    }
}

我使用的python代码如下

import pandas as pd
f = open(fjson )
data = json.load(f)
f.close()
for i in data['testCaseResult']:
    print(i)
testCaseResult_df = pd.DataFrame(data['testCaseResult'])
wribegjk

wribegjk1#

可以使用json_normalize

df = pd.json_normalize(data['testCaseResult'], 'testResultValue', 
                       ['timestamp','testCaseStatus','result',
                       ['testCaseFailureStatus','testCaseFailureStatusType'],
                       ['testCaseFailureStatus','updatedAt']])
print (df)
        name value   timestamp testCaseStatus  \
0  nullCount     2  1696257561         Failed   

                              result  \
0  Found nullCount=2. It should be 0   

  testCaseFailureStatus.testCaseFailureStatusType  \
0                                             New   

  testCaseFailureStatus.updatedAt  
0                   1696257581779
w1jd8yoj

w1jd8yoj2#

你的json包含嵌套结构。你必须在转换为JSON对象之前将其展平。

import pandas as pd
import json

fjson = 'C:/dati/json/json_file.json'
with open(fjson) as f:
    data = json.load(f)
    print(data)

flat_data = {}
for key, value in data['testCaseResult'].items():
    if isinstance(value, dict):
        for nested_key, nested_value in value.items():
            flat_data[f'{key}_{nested_key}'] = nested_value
    elif isinstance(value, list):
        for i, dict_ in enumerate(value):
            for nested_key, nested_value in dict_.items():
                flat_data[f'{key}_{i}_{nested_key}'] = nested_value
    else:
        flat_data[key] = value

testcaseresult_df = pd.DataFrame([flat_data]) # {'testCaseResult': {'timestamp': 1696257561, 'testCaseStatus': 'Failed', 'result': 'Found nullCount=2. It should be 0', 'testResultValue': [{'name': 'nullCount', 'value': '2'}], 'testCaseFailureStatus': {'testCaseFailureStatusType': 'New', 'updatedAt': 1696257581779}}}
nbewdwxp

nbewdwxp3#

你必须考虑什么是数据框架。
Pandas的数据框架是由行和列组成的表格数据。
你附上的json没有预处理似乎不合适。

ValueError: Mixing dicts with non-Series may lead to ambiguous ordering.

这个错误来自你json中的数组。
在我看来,除非你修改数据,否则出现错误是合理的。

vecaoik1

vecaoik14#

您需要扁平化嵌套结构,以便将JSON数据转换为DataFrame

def flatten_json(json_obj, parent_key='', separator='_'):
    items = {}
    for key, value in json_obj.items():
        new_key = parent_key + separator + key if parent_key else key
        if isinstance(value, dict):
            items.update(flatten_json(value, new_key, 
separator=separator))
        else:
            items[new_key] = value
    return items
flat_data = flatten_json(data)
testCaseResult_df = pd.DataFrame([flat_data])

希望能帮上忙!

相关问题