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},
}
在上面的代码中,嵌套字典的键是人名,值是包含各种服务和支付信息的字典。如果我们想将这个数据转换为一个方便的表格形式,最好的方法是将其转换为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)
这将产生以下输出:
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
在上面的代码中,我们使用了orient参数来告诉Pandas将每个子字典视为行。此外,我们还指定字典的键作为新DataFrame中的索引。
由于嵌套字典包含不同的键,因此我们得到的DataFrame包含NaN(Not a Number)值。这表示某些人没有使用或支付某些服务。我们可以使用fillna方法将NaN替换为零。例如,以下代码将NaN替换为零:
df.fillna(0, inplace=True)
print(df)
这将产生以下输出:
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
使用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)
这将产生以下输出:
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
在上面的代码中,我们使用循环遍历嵌套字典中的每个子字典,并将其转换为一个DataFrame。然后我们将这些数据框中的NaN替换为零并仅保留Spotify、Netflix和Uber这三个服务的列。接下来,我们将每个DataFrame添加到dfs列表中,并使用concat方法将它们连接在一起,从而构建最终的DataFrame。
总结
本文介绍了如何从嵌套字典中构建Pandas DataFrame。我们演示了使用from_dict和concat方法来实现这一目标,以及如何处理NaN值和仅选择所需列的情况。通过使用Pandas的这些方法,我们可以轻松地将嵌套字典转换为方便的表格形式,以进行后续分析和可视化。
极客教程