如何使用json_normalize但翻转轴



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

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)

结果如下

key  ...                          value
0                  time  ...  2022-12-13T23:59:59.939-07:00
1            agentNotes  ...                           null
2  blindTransferToAgent  ...                              0
[3 rows x 3 columns]

但是我试图创建我的键作为列和值作为值,所以最终结果看起来像这样。

time agentNotes blindTransfertoAgent

2022-12-13T23:590:59.939-07:00 null 0

如有任何帮助,不胜感激。

我没有找到这个问题的捷径,也许有人可以给我们一些启发。
然而,解决方案并没有那么长,所以我还是想把它贴出来。

你"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(默认值为一个列表),我们将把它读入pandas数据框。
  • 在JSON"中插入每个key的值我们有
  • 将字典读入pandasDataFrame-如果这些值的长度不相同,则将索引定向并转置。(例如有一个blindTransferToAgent1),如果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

试着改变这个:

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

相关内容

  • 没有找到相关文章

最新更新