首页 > 解决方案 > Pandas 列字典拆分为新列和行

问题描述

我在熊猫数据框列中有一个字典,输入是,

import pandas as pd
df = pd.DataFrame([{'A': {'k1': 10}}, {'A': {'k2': 20, 'k3': 30}}, {'A': {'k4': 15}}])

df
                        A
0             {u'k1': 10}
1  {u'k3': 30, u'k2': 20}
2             {u'k4': 15}

我想将dict“A”列中的键和值拆分为新列并拆分为行(取决于字典中的键数),基本上输出应该如下所示,

  keys  values
0   k1      10
1   k3      30
2   k2      20
3   k4      15

标签: pythonpandas

解决方案


使用列表推导和扁平化元组,然后使用DataFrame构造函数:

L = [(k1, v1) for k, v in df['A'].to_dict().items() for k1, v1 in v.items()]

df = pd.DataFrame(L, columns = ['keys','values'])
print (df)
  keys  values
0   k1      10
1   k2      20
2   k3      30
3   k4      15

或创建DataFramestack

df = (pd.DataFrame(df['A'].values.tolist())
       .stack().reset_index(level=0, drop=True)
       .reset_index())
df.columns = ['keys','values']
print (df)
  keys  values
0   k1    10.0
1   k2    20.0
2   k3    30.0
3   k4    15.0

推荐阅读