【问题标题】:How to create dataframe of the keys and values from a series of dictionaries [duplicate]如何从一系列字典中创建键和值的数据框[重复]
【发布时间】:2021-09-16 14:26:53
【问题描述】:

我将 json 数据读入数据框,第一列的数据格式如下:

0     {'name': 'Mark Vande Hei', 'craft': 'ISS'}      10  success

1     {'name': 'Oleg Novitskiy', 'craft': 'ISS'}      10  success

如何创建一个包含 2 列的新数据框:根据上述数据命名和制作?

url_crew = 'http://api.open-notify.org/astros.json'
crew = pd.read_json(url_crew)
print(crew)

【问题讨论】:

  • 您的输入是 JSON,并且您想将其转换为 dtaframe(正确地,而不仅仅是一个大字符串)。没有数据框的“名称”元素之类的东西。您只是指数据框列中 JSON 的结构。

标签: python json pandas


【解决方案1】:

Pandas 有一个非常方便的实用功能,pd.json_normalize 可以做到这一点。

它接受一个字典列表或一系列字典。

url_crew = 'http://api.open-notify.org/astros.json'
crew = pd.read_json(url_crew)

df = pd.json_normalize(crew["people"])
print(df)

输出

              name     craft
0   Mark Vande Hei       ISS
1   Oleg Novitskiy       ISS
2     Pyotr Dubrov       ISS
3   Thomas Pesquet       ISS
4   Megan McArthur       ISS
5  Shane Kimbrough       ISS
6  Akihiko Hoshide       ISS
7     Nie Haisheng  Tiangong
8       Liu Boming  Tiangong
9      Tang Hongbo  Tiangong

【讨论】:

    【解决方案2】:
        url_crew = 'http://api.open-notify.org/astros.json'
        crew = pd.read_json(url_crew)
    
    >>> df = pd.concat([crew.drop(['people'], axis=1), crew['people'].apply(pd.Series)], axis=1)
    >>> df = df[['name','craft']]
    >>> df
                  name     craft
    0   Mark Vande Hei       ISS
    1   Oleg Novitskiy       ISS
    2     Pyotr Dubrov       ISS
    3   Thomas Pesquet       ISS
    4   Megan McArthur       ISS
    5  Shane Kimbrough       ISS
    6  Akihiko Hoshide       ISS
    7     Nie Haisheng  Tiangong
    8       Liu Boming  Tiangong
    9      Tang Hongbo  Tiangong
    

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 2018-09-21
      • 2018-02-14
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      相关资源
      最近更新 更多