python - 将 dict 的 pandas dataframe 列扩展为 dataframe 列

标签 python pandas dictionary dataframe series

我有一个 Pandas DataFrame,其中一列是一系列字典,如下所示:

   colA  colB                                  colC
0     7     7  {'foo': 185, 'bar': 182, 'baz': 148}
1     2     8  {'foo': 117, 'bar': 103, 'baz': 155}
2     5    10  {'foo': 165, 'bar': 184, 'baz': 170}
3     3     2  {'foo': 121, 'bar': 151, 'baz': 187}
4     5     5  {'foo': 137, 'bar': 199, 'baz': 108}

我想要foo , barbaz字典中的键值对将成为我的数据框中的列,这样我最终会得到以下结果:

   colA  colB  foo  bar  baz
0     7     7  185  182  148
1     2     8  117  103  155
2     5    10  165  184  170
3     3     2  121  151  187
4     5     5  137  199  108

我该怎么做?

最佳答案

TL;DR

基于Carlos Horn's注释 pd.json_normalize 非常适合此操作:

df_fixed = df.join(pd.json_normalize(df['colC'])).drop('colC', axis='columns')

旧答案

df = df.drop('colC', axis=1).join(pd.DataFrame(df.colC.values.tolist()))

详细(旧)答案

我们首先定义要使用的 DataFrame,并导入 Pandas:

import pandas as pd


df = pd.DataFrame(
    {
        'colA': {0: 7, 1: 2, 2: 5, 3: 3, 4: 5},
        'colB': {0: 7, 1: 8, 2: 10, 3: 2, 4: 5},
        'colC': {
            0: {'foo': 185, 'bar': 182, 'baz': 148},
            1: {'foo': 117, 'bar': 103, 'baz': 155},
            2: {'foo': 165, 'bar': 184, 'baz': 170},
            3: {'foo': 121, 'bar': 151, 'baz': 187},
            4: {'foo': 137, 'bar': 199, 'baz': 108},
        },
    }
)

colC 是一个 pd.Series 字典,我们可以通过将每个字典转换为 pd.DataFrame 将其转换为 pd.DataFrame a pd.Series:

pd.DataFrame(df.colC.values.tolist())
# df.colC.apply(pd.Series). # this also works, but it is slow

给出了pd.DataFrame:

   foo  bar  baz
0  154  190  171
1  152  130  164
2  165  125  109
3  153  128  174
4  135  157  188

所以我们需要做的是:

  1. colC 转换为 pd.DataFrame
  2. df中删除原来的colC
  3. 将转换 colCdf 连接

这可以用一句话来完成:

df = df.drop('colC', axis=1).join(pd.DataFrame(df.colC.values.tolist()))

现在 df 的内容是 pd.DataFrame:

   colA  colB  foo  bar  baz
0     2     4  154  190  171
1     4    10  152  130  164
2     4    10  165  125  109
3     3     8  153  128  174
4    10     9  135  157  188

关于python - 将 dict 的 pandas dataframe 列扩展为 dataframe 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54344114/

相关文章:

python - 使用 Python 的 twitter 库进行程序化转发

python - Pandas - 如何根据正则表达式过滤行

c++ - 尽管创建了默认构造函数,但没有合适的默认构造函数可用?

c++ - 遇到内存泄漏问题 - 在 std::map 中重新绑定(bind)键

python - 列出所有TSP路由组合(5个顶点)

python - 获取 2 个 pandas 列的范围列表

python - pytest 的 addoptions 和动态参数化测试装置的问题

python - 比较同一 pandas 数据帧中 2 列的值并基于比较返回第三列的值

python - DataFrame 中满足条件的所有行的快速总和

Python字典,查找相似之处