如何从一系列字典中创建键和值的数据框[重复]

Posted

技术标签:

【中文标题】如何从一系列字典中创建键和值的数据框[重复]【英文标题】: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 的结构。 【参考方案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

【讨论】:

以上是关于如何从一系列字典中创建键和值的数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章

枚举字典迭代键和值[重复]

使用 Swift 将具有相同类型的字典分组到具有完整键和值的数组中

vbscript 具有键和值的组合框

在python中的字典中切换键和值[重复]

使用 min 从字典中获取最低键和值 [重复]

如何在 AngularJS 中使用 ng-repeat 迭代键和值?