首页 >后端开发 >Python教程 >如何有效地将 Pandas DataFrame 字典列拆分为单独的列?

如何有效地将 Pandas DataFrame 字典列拆分为单独的列?

DDD
DDD原创
2024-12-16 04:21:13439浏览

How to Efficiently Split a Pandas DataFrame Column of Dictionaries into Separate Columns?

用 Pandas 将一列字典拆分为单独的列

问题介绍

工作时使用 Pandas DataFrames,经常会遇到列包含字典的情况它的价值观。这可能会给进一步的数据分析带来挑战,因为需要将字典分成单独的列,以便更好地访问和操作。当字典具有不同的长度并包含共享密钥时,此问题变得尤为重要。

原始方法和错误

论坛帖子中的用户描述了一个 DataFrame,其中 '污染物水平列包含字典。最初,他们尝试使用以下代码拆分此列:

objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)

但是,此方法由于越界切片而导致 IndexError。

Unicode 问题

用户进一步怀疑“污染物”中词典的Unicode格式级别列可能会导致问题。它们的形式为:

u{'a': '1', 'b': '2', 'c': '3'}

而不是:

{u'a': '1', u'b': '2', u'c': '3'}

解决方案

要解决这些问题,以下方法是推荐:

import pandas as pd

df['Pollutant Levels'] = df['Pollutant Levels'].apply(lambda x: dict(x))
df2 = pd.json_normalize(df['Pollutant Levels'])

说明

第一行代码将 Unicode 字典转换为标准字典。第二行利用 Pandas 的 json_normalize 函数,它提供了一种将字典列转换为单独列的便捷方法。此函数避免了对昂贵的应用函数的需要,并生成所需的 DataFrame:

Station ID     a      b       c
8809           46     3       12
8810           36     5       8
8811           NaN    2       7
8812           NaN    NaN     11
8813           82     NaN     15

以上是如何有效地将 Pandas DataFrame 字典列拆分为单独的列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn