我有一个包含大量列的pandas数据框架。一列包含字典值。
我可以"explode".map(eval)apply(pd.Series)">
我需要这些结果列插入到原始df。
我不知道怎么做。在所有的
result = df['dic_column'].map(eval).apply(pd.Series)
result
A B C D E
1 0 0 0 1 0
2 1 9 0 9 0
3 0 0 0 1 0
4 1 9 0 9 0
5 0 0 0 2
想要的结果:
df
user_id og_column1 og_column2 A B C D E
1 valuey valuey 0 0 0 1 0
2 valuex valuex 1 9 0 9 0
...
编辑:
解决方案:回归。
result = df.join(df['dic_column'].map(eval).apply(pd.Series))
可以为一个DataFrame分配多个列:
df[result.columns] = result
或者您可以使用DataFrame.join
:
df = df.join(result)
技术上你也可以使用concat
:
df = pd.concat((df, result), axis='columns')
以上都是非常相似的操作。
它们都执行join(在关系代数意义上)在数据帧的行标签上。
在Pandas术语中,行标签是"索引"。数据帧的。默认情况下,如果没有显式创建或分配索引,则行标签只是一个整数范围,对应于行数字。行号和行标签之间的区别在于,大多数Pandas操作都会保留行标签,而行号只是行号。
所以如果你打乱一个数据帧,索引也会被打乱。除此之外,这个特性允许您将数据重新连接到它的源,即使在进行了一些相当复杂的数据操作之后。
官方Pandas文档没有一个统一的资源来理解"索引"。数据模型。然而,找到这篇博客文章,它似乎涵盖了你需要知道的大部分内容。
Henry Ecker在评论中给出了解决方案
我们可以把结果连接起来。
result = df.join(df['dic_column'].map(eval).apply(pd.Series))