如何防止 json_normalize 在 Pandas 中重复列标题?

Posted

技术标签:

【中文标题】如何防止 json_normalize 在 Pandas 中重复列标题?【英文标题】:How to prevent json_normalize from repeating column headings in Pandas? 【发布时间】:2017-09-03 17:21:09 【问题描述】:

我的json结构如下:


   "data": 
              "item1": 
                       "field1": "foo",
                       "field2": "bar",
                       "field3": "baz"
                       ,
              "item2": 
                       "field1": "foo1",
                       "field2": "bar1",
                       "field3": "baz1"
                       ,
           

当我使用pd.io.json.json_normalize 规范化这个数据结构时,我得到一个包含 1 行的数据框,并且每个数据项都有重复的列标题。如何让重复的列显示为行而不是列?

我现在得到了这个

field1 | field2 | field3 | field1 |field2 | field3

foo     | bar    | baz    | foo1   | bar1  | baz1  

我想要的是:

field1 | field2 | field3 |


foo     | bar    | baz

foo1    | bar1   | baz1

【问题讨论】:

【参考方案1】:

这是你想要的吗?

In [31]: d
Out[31]:
'data': 'item1': 'field1': 'foo', 'field2': 'bar', 'field3': 'baz',
  'item2': 'field1': 'foo1', 'field2': 'bar1', 'field3': 'baz1'

In [32]: pd.DataFrame(d['data']).T
Out[32]:
      field1 field2 field3
item1    foo    bar    baz
item2   foo1   bar1   baz1

【讨论】:

我怀疑你已经投票了...但我edited the post...这很奇怪:-)【参考方案2】:

您可以尝试将data转换为列表,然后使用json_normalize对数据进行归一化处理:

from pandas.io.json import json_normalize

content="data": "item1": "field1": "foo","field2": "bar","field3": "baz","item2": "field1": "foo1","field2": "bar1","field3": "baz1",

content["data"]=content["data"].values()

result = json_normalize(content,"data")

print(result)

输出:

  field1 field2 field3
0   foo1   bar1   baz1
1    foo    bar    baz

【讨论】:

以上是关于如何防止 json_normalize 在 Pandas 中重复列标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 json_normalize 规范化嵌套的 json

如何正确 json_normalize 以便我以正确的格式获取数据帧?

当json_normalize无法迭代列以展平时如何修复它?

使用 pd.json_normalize 展平字典

Pandas json_normalize 的逆

Pandas json_normalize 无法在 Python 中使用大型 JSON 文件