python 如何使用json_normalize但翻转轴

2cmtqfgy  于 2023-01-19  发布在  Python
关注(0)|答案(2)|浏览(116)

嘿,伙计们,我一直在转换一些json文本,我从一个API接收,我注意到有些人使用json_normalize,但在我的情况下,它不能解决整个问题,我想知道是否有人可以帮助。

my_json = [
    {
        "total": "null",
        "items": [
            {
                "key": "time",
                "label": "Time",
                "value": "2022-12-13T23:59:59.939-07:00"
            },
            {
                "key": "agentNotes",
                "label": "Agent Notes",
                "value": "null"
            },
            {
                "key": "blindTransferToAgent",
                "label": "Blind Transfer To Agent",
                "value": "0"
            }]},
  {"total": "null",
        "items": [
            {
                "key": "time",
                "label": "Time",
                "value": "2022-12-13T23:59:59.939-07:00"
            },
            {
                "key": "agentNotes",
                "label": "Agent Notes",
                "value": "null"
            },
            {
                "key": "blindTransferToAgent",
                "label": "Blind Transfer To Agent",
                "value": "0"
            }
        ]}]
df = pd.json_normalize(my_json, ["items"])
print(df)

这会得到这样的结果
一个一个二个一个一个一个三个一个
但我尝试将键创建为列,将值创建为值,因此最终结果如下所示。
时间座席注解盲转接至座席
2022年12月13日23时59分59秒939分07时零
任何帮助都将不胜感激。

i7uq4tfw

i7uq4tfw1#

我没有找到解决这个问题的捷径,也许有人能给我们一些启发。
然而,解决方案不是那么长,所以我想张贴它无论如何。
如果我没有阅读错你的问题,你的“JSON”并不是真正的JSON,它是一个包含两个键totalitems的字典的列表,items的值是字典的列表,所以我们可以迭代这些值,并从每个字典中获取key-value元素:

from collections import defaultdict
import pandas as pd

dict_to_df = defaultdict(list)
dictionaries = [inner_dicts for items_dict in my_json for inner_dicts in items_dict['items']]

for dictionary in dictionaries:
    dict_to_df[dictionary['key']].append(dictionary['value'])

df = pd.DataFrame.from_dict(dict_to_df, orient='index').T
print(df)

其输出:

time agentNotes blindTransferToAgent
0  2022-12-13T23:59:59.939-07:00       null                    0
解释:
  • 初始化一个空的defaultdict(默认值为list),我们将把它读到一个panda Dataframe 中。
  • 将每个key的值插入到我们的“JSON”中
  • 将字典读入一个panda DataFrame--如果这些值的长度不同,则调整索引的方向并转置。(例如,还有一个值为1blindTransferToAgent)如果JSON看起来像这样,则进行处理:
{
            "key": "time",
            "label": "Time",
            "value": "2022-12-13T23:59:59.939-07:00"
        },
        {
            "key": "agentNotes",
            "label": "Agent Notes",
            "value": "null"
        },
        {
            "key": "blindTransferToAgent",
            "label": "Blind Transfer To Agent",
            "value": "0"
        },
        {
            "key": "blindTransferToAgent",
            "label": "Blind Transfer To Agent",
            "value": "4"
        }

它将输出:

time agentNotes blindTransferToAgent
0  2022-12-13T23:59:59.939-07:00       null                    0
1                           None       None                    4
62lalag4

62lalag42#

尝试更改此设置:

df = pd.json_normalize(my_json, ["items"])

变成这样:

df = pd.json_normalize(my_json, ["items"]).T

Pandas DataFrame对象中的T属性存储索引和列的换位,这就是您要查找的内容。
输出:

0            1                        2
key                             time   agentNotes     blindTransferToAgent
label                           Time  Agent Notes  Blind Transfer To Agent
value  2022-12-13T23:59:59.939-07:00         null                        0

相关问题