【问题标题】:How can I normalize json我怎样才能规范化json
【发布时间】:2020-09-24 17:02:36
【问题描述】:

我无法标准化看起来像这样的 json 字符串:

{
    "Mercy": [
        [
            "Chicago",
            "New Orleans"
        ]
    ],
    "Zarya": [
        [
            "Rio de Janeiro",
            "Capetown"
        ],
        [
            "Rome",
            "Seattle"
        ]
    ],
    "Torbjörn": [
        [
            "Buenos Aires",
            "New York"
        ],
        [
            "Capetown",
            "Juneau"
        ],
        [
            "Istanbul",
            "Cairo"
        ]
    ]
}

我想得到这样的数据框: 城市名称 城市 1 城市 2 城市 3 城市 4 城市 5 城市 6 ..... 城市 N 0 1 . . . 有可能吗?

【问题讨论】:

  • 请张贴您预期输出的视觉效果

标签: python json pandas pandas-datareader


【解决方案1】:

我相信你需要 2 列 DataFrame:

df = pd.DataFrame([(k, y) for k, v in d.items() for x in v for y in x],
                   columns=['name','city'])
print (df)
        name            city
0      Mercy         Chicago
1      Mercy     New Orleans
2      Zarya  Rio de Janeiro
3      Zarya        Capetown
4      Zarya            Rome
5      Zarya         Seattle
6   Torbjörn    Buenos Aires
7   Torbjörn        New York
8   Torbjörn        Capetown
9   Torbjörn          Juneau
10  Torbjörn        Istanbul
11  Torbjörn           Cairo

编辑:如果需要新列中的列表,请使用:

df = pd.DataFrame([(k,*x) for k, v in d.items() for x in v])
df.columns=['name'] + [f'city{i}' for i in df.columns[1:]]
print (df)
       name           city1        city2
0     Mercy         Chicago  New Orleans
1     Zarya  Rio de Janeiro     Capetown
2     Zarya            Rome      Seattle
3  Torbjörn    Buenos Aires     New York
4  Torbjörn        Capetown       Juneau
5  Torbjörn        Istanbul        Cairo

【讨论】:

    【解决方案2】:

    也许这对你有用? (您的数据在data.json 文件中)

    with open('data.json', 'r') as fil: 
         DATA = pd.read_json(fil, orient='index')
    
    print(DATA.T)
    

    输出:

               Mercy                       Zarya                  Torbjörn
    0  [Chicago, New Orleans]  [Rio de Janeiro, Capetown]  [Buenos Aires, New York]
    1                    None             [Rome, Seattle]        [Capetown, Juneau]
    2                    None                        None         [Istanbul, Cairo]
    

    【讨论】:

      【解决方案3】:

      pandas 中有一个函数json_normalize()(不确定版本是否正确)

      json_normalize(json_data)
      

      它返回一个扁平化的数据框

      这里是API reference

      看起来是这样的:

      【讨论】:

        猜你喜欢
        • 2017-09-09
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多