我有一个这样的数据框:
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': '',
})