如何将字典转换为Pandas Dataframe

  • Post category:Python

将字典转换为Pandas Dataframe 是数据科学中一项非常常用的方法,这里提供详细的攻略,包括基本方法和实际示例。

基本方法

将字典转换为 Pandas Dataframe,可以使用 Pandas 提供的函数 pd.DataFrame()。该函数有两个主要用法:

1. 将字典的键值对作为行(row)

在这种情况下,字典的键将成为 Pandas Dataframe 的“行索引”(row index),值将成为 Dataframe 的“行(row)”。示例代码如下:

import pandas as pd

# 创建一个字典
d = {"name": ["Alice", "Bob", "Charlie", "David"],
     "age": [25, 30, 20, 35],
     "gender": ["F", "M", "M", "M"]}

# 将字典转换为 Pandas Dataframe
df = pd.DataFrame.from_dict(d, orient="index").T

# 显示结果
print(df)

输出结果如下:

       name age gender
0     Alice  25      F
1       Bob  30      M
2   Charlie  20      M
3     David  35      M

在这个示例中,使用字典 d 创建了一个 Pandas Dataframe。使用函数 from_dict() 将字典转换为 Dataframe,在 from_dict() 内部,指定 orient="index",表示字典的键值对作为行(row)的数据。转换完成之后,再使用 .T 将 Dataframe 旋转,使得“行索引”(原来的字典键)变为了“列索引”。

2. 将字典的键值对作为列(column)

在这种情况下,字典的键将成为 Pandas Dataframe 的“列索引”(column index),值将成为 Dataframe 的“列(column)”。示例代码如下:

import pandas as pd

# 创建一个字典
d = {"name": ["Alice", "Bob", "Charlie", "David"],
     "age": [25, 30, 20, 35],
     "gender": ["F", "M", "M", "M"]}

# 将字典转换为 Pandas Dataframe
df = pd.DataFrame.from_dict(d)

# 显示结果
print(df)

输出结果如下:

      name  age gender
0    Alice   25      F
1      Bob   30      M
2  Charlie   20      M
3    David   35      M

在这个示例中,使用字典 d 创建了一个 Pandas Dataframe。使用函数 from_dict() 将字典转换为 Dataframe,默认情况下字典的键值对作为列(column)的数据。从结果来看,这个 Dataframe 的列索引为键,数据为对应的值。当字典的值是列表时,Dataframe 中的每一列将对应列表中的每个元素。

实例说明

下面通过一个具体的示例来演示如何将字典转换为 Pandas Dataframe。

假设我们有一个包含 4 个元素的字典,其中每个元素代表一场足球比赛的数据,包括比赛名、日期、参赛队伍,以及比分。具体内容如下:

d = {"game1": {"date": "2021-01-01",
               "teams": ["China", "Japan"],
               "score": [0, 1]},
     "game2": {"date": "2021-01-02",
               "teams": ["USA", "Russia"],
               "score": [2, 2]},
     "game3": {"date": "2021-01-03",
               "teams": ["Spain", "Italy"],
               "score": [1, 1]},
     "game4": {"date": "2021-01-04",
               "teams": ["Brazil", "Argentina"],
               "score": [3, 1]}}

现在我们要将这个字典转换为 Pandas Dataframe。根据需求,这次我们将字典的键值对作为列(column)的数据。示例代码如下:

import pandas as pd

# 将字典转换为 Pandas Dataframe
df = pd.DataFrame.from_dict({i: dict(d[i]) for i in d}, orient="index")

# 添加比赛名为索引
df.index.name = "game name"

# 展示结果
print(df)

该代码将字典转换为 Pandas Dataframe,其中 {i: dict(d[i]) for i in d} 会生成一个新的字典,该字典的键与原字典相同,但值的类型变为了字典。然后,使用 from_dict() 函数将新字典转换为 Dataframe, orient="index" 表示将字典的键值对作为列(column)的数据。接下来,将比赛名设置为索引,即 df.index.name = "game name"。最后,输出结果:

                                        date              teams   score
game name                                                                
game1                              2021-01-01    [China, Japan]  [0, 1]
game2                              2021-01-02   [USA, Russia]    [2, 2]
game3                              2021-01-03    [Spain, Italy]  [1, 1]
game4                              2021-01-04  [Brazil, Argentina]  [3, 1]

该结果将 d 的数据转换为 Dataframe,并将比赛名设置为索引列。同时,注意到字典的 teamsscore 列中的数据是列表,实际上也转换为了 Dataframe 中的一列。