用 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中文网其他相关文章!