熊猫将带有字典列表的单元格扩展为行,每个行都有一个列

时间:2020-10-14 20:14:34

标签: python pandas dataframe

我有一个这样的数据框:

     col1                                     col2       col3
0    "[{'key1':'val1'}, {'key1':'val2'}]"        a          g
1    "[{'key1':'val3'}, {'key1':'val4'}]"        b          h
2    "[{'key1':'val5'}, {'key1':'val6'}]"        c          i

我想对其进行处理,使其最终如下所示:

     col2       col3   key1
0    a          g      val1 
1    a          g      val2
2    b          h      val3
3    b          h      val4
4    c          i      val5
5    c          i      val6

这略有简化。 col1中的词典有更多列,而其他两列也更多。

我在其他帖子中也看到了类似的解决方案,但是所有这些工作都是在col1是常规列表的前提下进行的。我对熊猫还不够熟悉,无法弄清楚如何找到适合我情况的解决方案。任何帮助表示赞赏。谢谢

更新:我找到了解决方法

首先,我将字符串转换为字典列表:

df['col1'] = df['col1'].apply(json.loads)

然后我爆炸了,因此每个字典都有自己的行:

res = df.explode('col1')

然后我为字典中的每个键创建一列:

res[['key1','key2','key3']] = res['col1'].apply(lambda x: self._explode_dict(x))

这是我的_explode_dict(row)函数。目的是避免空字典进入pd.Series的错误

if (isinstance(row, dict) and bool(row)):
   return pd.Series(row)
return pd.Series({
    'key1': '',
    'key2': '',
    'key3': '',
})

0 个答案:

没有答案