Pandas 从嵌套字典中构建DataFrame

Pandas 从嵌套字典中构建DataFrame

在本文中,我们将介绍如何从嵌套字典中构建Pandas DataFrame。首先,让我们定义一个嵌套字典,该字典包含每个人上个月使用和支付的不同服务的详细信息。

data = {
    'Alice': {'Spotify': 9.99, 'Netflix': 15.99, 'Uber': 31.60},
    'Bob': {'Hulu': 11.99, 'Uber': 35.50, 'Lyft': 45.25},
    'Charlie': {'Netflix': 15.99, 'Airbnb': 204.65},
    'David': {'Spotify': 9.99, 'Uber': 22.35, 'Airbnb': 98.50},
    'Eve': {'Spotify': 9.99, 'Lyft': 37.35, 'Uber': 20.70},
}
Python

在上面的代码中,嵌套字典的键是人名,值是包含各种服务和支付信息的字典。如果我们想将这个数据转换为一个方便的表格形式,最好的方法是将其转换为Pandas DataFrame。

阅读更多:Pandas 教程

使用from_dict方法

Pandas提供了一个from_dict方法,可以从字典创建DataFrame。然而,当字典嵌套时,该方法提供了不同的选项,取决于嵌套的字典包含键还是值。

在我们的例子中,嵌套字典包含每个人的服务和支付信息。在这种情况下,我们需要指定orient参数为”index”以表示嵌套字典的每个子字典都是行。以下是如何使用from_dict方法以这种方式创建DataFrame。

import pandas as pd

df = pd.DataFrame.from_dict(data, orient='index')
print(df)
Python

这将产生以下输出:

             Spotify  Netflix    Uber   Hulu   Lyft  Airbnb
Alice           9.99    15.99   31.60    NaN    NaN     NaN
Bob              NaN     NaN   35.50  11.99  45.25     NaN
Charlie        NaN    15.99     NaN    NaN    NaN  204.65
David           9.99     NaN   22.35    NaN    NaN   98.50
Eve             9.99     NaN   20.70    NaN  37.35     NaN
Python

在上面的代码中,我们使用了orient参数来告诉Pandas将每个子字典视为行。此外,我们还指定字典的键作为新DataFrame中的索引。

由于嵌套字典包含不同的键,因此我们得到的DataFrame包含NaN(Not a Number)值。这表示某些人没有使用或支付某些服务。我们可以使用fillna方法将NaN替换为零。例如,以下代码将NaN替换为零:

df.fillna(0, inplace=True)
print(df)
Python

这将产生以下输出:

             Spotify  Netflix    Uber   Hulu   Lyft  Airbnb
Alice           9.99    15.99   31.60   0.00   0.00    0.00
Bob             0.00     0.00   35.50  11.99  45.25    0.00
Charlie        0.00    15.99    0.00   0.00   0.00  204.65
David           9.99     0.00   22.35   0.00   0.00   98.50
Eve             9.99     0.00   20.70   0.00  37.35    0.00
Python

使用concat方法

另一种将嵌套字典转换为DataFrame的方法是使用Pandas的concat方法。这种方法可以在某些情况下比from_dict方法更灵活。例如,在我们的例子中,您可能希望只包括Spotify、Netflix和Uber这三个服务,并将NaN替换为零。以下是使用concat方法执行此操作的示例代码:

dfs = []
for name, services in data.items():
    service_df = pd.DataFrame.from_dict(services, orient='index', columns=[name])
    dfs.append(service_df[['Spotify', 'Netflix', 'Uber']].fillna(0))

df = pd.concat(dfs, axis=1)
print(df)
Python

这将产生以下输出:

         Alice   Bob  Charlie  David   Eve
Spotify   9.99  0.00     0.00   9.99  9.99
Netflix  15.99  0.00    15.99   0.00  0.00
Uber     31.60 35.50     0.00  22.35 20.70
Python

在上面的代码中,我们使用循环遍历嵌套字典中的每个子字典,并将其转换为一个DataFrame。然后我们将这些数据框中的NaN替换为零并仅保留Spotify、Netflix和Uber这三个服务的列。接下来,我们将每个DataFrame添加到dfs列表中,并使用concat方法将它们连接在一起,从而构建最终的DataFrame。

总结

本文介绍了如何从嵌套字典中构建Pandas DataFrame。我们演示了使用from_dictconcat方法来实现这一目标,以及如何处理NaN值和仅选择所需列的情况。通过使用Pandas的这些方法,我们可以轻松地将嵌套字典转换为方便的表格形式,以进行后续分析和可视化。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册