【问题标题】:Read json with pandas, problem with columns用 pandas 读取 json,列有问题
【发布时间】:2021-05-20 14:29:03
【问题描述】:

我正在尝试使用 pandas 将 json 文件转换为 csv 表。

我的 json 文件来自《权力的游戏》,其中包含来自角色的信息。问题是每一行可以包含字典的不同键。

我想构建一个 csv 文件,其中包含 json 文件每一行的所有唯一键作为列。

Here is the link to the json file

这是我到目前为止所做的:

import pandas as pd
file = link
df = pd.read_json(file)
df2 = df['characters']
#from here on I'm stuck

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    pandas.json_normalize

    >>> import pandas as pd
    >>> path = 'characters.json'
    >>> df = pd.read_json(path)
    >>> df2 = pd.json_normalize(df['characters'])
    >>> df2.columns
    Index(['characterName', 'characterLink', 'actorName', 'actorLink', 'houseName',
           'royal', 'parents', 'siblings', 'killedBy', 'characterImageThumb',
           'characterImageFull', 'nickname', 'killed', 'servedBy', 'parentOf',
           'marriedEngaged', 'serves', 'kingsguard', 'guardedBy', 'actors',
           'guardianOf', 'allies', 'abductedBy', 'abducted', 'sibling'],
          dtype='object')
    >>> df2.loc[df2['characterName']=='Sansa Stark']
        characterName          characterLink      actorName         actorLink  ... allies abductedBy abducted sibling
    300   Sansa Stark  /character/ch0158137/  Sophie Turner  /name/nm3849842/  ...    NaN        NaN      NaN     NaN
    
    [1 rows x 25 columns]
    >>>
    >>> df2.loc[df2['characterName']=='Sansa Stark']['siblings']
    300    [Robb Stark, Arya Stark, Bran Stark, Rickon St...
    Name: siblings, dtype: object
    >>> df2.to_csv('got.csv', index=False)
    

    【讨论】:

      【解决方案2】:

      如果您已经下载了 json 文件并保存了例如名称 file.json,您可以使用以下代码:

      import pandas as pd
      import json
      
      
      with open('file.json') as f:
          d = json.load(f)['characters']
          df = pd.DataFrame(d)
      df.to_csv("characters.csv")
      

      或者如果你想从 URL 下载 json 文件,你可以使用这个:

      import pandas as pd
      import json
      from urllib.request import urlopen
      
      url = "https://raw.githubusercontent.com/jeffreylancaster/game-of- 
      thrones/master/data/characters.json"
      response = urlopen(URL)
      data_json = json.loads(response.read())
      
      characters = data_json['characters']
      df = pd.DataFrame(characters)
      df.to_csv("characters.csv")
      

      【讨论】:

        猜你喜欢
        • 2022-06-22
        • 1970-01-01
        • 2019-02-10
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多