【问题标题】:Converting a Dataframe Column of Dictionaries into New Columns based on Keys将字典的数据框列转换为基于键的新列
【发布时间】:2020-11-06 16:28:33
【问题描述】:

我有一个 Pandas 数据框列,其中包含多个字典,格式为:

df[students] = {u'51': [u'1592', u'1582', u'1272', u'459', u'1254', u'1267'], u'32': [u'1659', u'1322', u'1396', u'1315', u'1342', u'1661']} {u'51': [u'1592', u'1582', u'1272', u'459', u'1254', u'1267'], u'32': [u'1659', u'1322', u'1396', u'1315', u'1342', u'1661']} ... 等等以获取更多条目。

每个字典代表数据框中的一个条目。我想将此列转换为 2 个新列,其中键(51 和 32)是列标题,值相应地进入每一列。我使用了df.to_list()Pd.Series() 方法,起初它们似乎可以工作,但是当我复制它时,它根本没有改变数据。我这里有什么遗漏吗?

【问题讨论】:

  • 字典是否都有相同的键?并且您想将所有字典中的例如键 51 的列表堆叠到单个列中吗?

标签: python pandas list dataframe dictionary


【解决方案1】:

为什么不这样做:

df['51'], df['32'] = df['col'].apply(lambda x: (x['51'], x['32']))

>>> print(df[['51','32']])
                                     51                                    32
0   (1592, 1582, 1272, 459, 1254, 1267)   (1592, 1582, 1272, 459, 1254, 1267)
1  (1659, 1322, 1396, 1315, 1342, 1661)  (1659, 1322, 1396, 1315, 1342, 1661)

【讨论】:

  • 刚试了一下,得到'字符串索引必须是整数,而不是str'的错误。
  • 试试 x[51] 和 x[32]
  • 太多值现在无法解压。我正在处理一个相当大的数据集
  • 我不确定.. 我复制并粘贴了您的 OP 代码,除非有什么不同,它应该可以工作
  • 我正在使用的数据框有 28 个其他列,但这不应该产生影响,因为我想要操作的唯一一个是其中包含所有字典的那个。有些字典的长度比其他字典短(值较少),但我无法想象这会导致问题
【解决方案2】:

事实证明,当有问题的字符串是 unicode 时,上面发布的方法不起作用。

这终于奏效了:

df['students'] = df['students'].map(eval)

df2 = pd.concat([df.drop('students', axis=1), pd.DataFrame(df['students'].tolist())], axis=1)

感谢大家发布的答案,谢谢大家。

【讨论】:

    【解决方案3】:

    这个怎么样(你可以用 ANY 组键转换 ANY 数量的字典。如果任何字典中缺少一个键,它会将 NaN 分配给那个单元格):

    from pandas.io.json import json_normalize
    df2 = json_normalize(df['students'])
    

    df2:

                                        51                                    32
    0  [1592, 1582, 1272, 459, 1254, 1267]  [1659, 1322, 1396, 1315, 1342, 1661]
    1  [1592, 1582, 1272, 459, 1254, 1267]  [1659, 1322, 1396, 1315, 1342, 1661]
    

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2021-10-13
      • 2016-10-23
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2023-03-12
      • 2018-12-13
      • 2019-11-18
      相关资源
      最近更新 更多