如何将Pandas DataFrame中字典列拆分为多列?现有方法失效
解决方法
首先,我们可以先将字典列转换为独立的DataFrame,再合并回原表,就能得到你需要的四个新列。如果还需要将列表元素展开为多行,可以再用explode处理。
步骤1:将字典列转换为新列
假设你的原始DataFrame名为df,执行以下代码:
import pandas as pd # 将dbpedia_entry列的字典展开为DataFrame expanded_df = df['dbpedia_entry'].apply(pd.Series) # 将展开后的列合并到原DataFrame,同时移除原字典列 result_df = pd.concat([df.drop('dbpedia_entry', axis=1), expanded_df], axis=1)
执行后,result_df就会新增dbpedia_entity、dbpedia_id、dbpedia_label、dbpedia_raw_result四个列,每个列的单元格对应原字典中键的列表值。
步骤2(可选):将列表元素展开为多行
如果需要把每个列表里的元素单独占一行,同时保留其他列的对应值,可以使用explode。注意:如果不同列的列表长度不一致,explode会自动将较短列表的元素重复,以匹配最长列表的长度(或者你可以指定仅展开特定列):
# 展开所有包含列表的列,重置索引 final_df = result_df.explode( ['dbpedia_entity', 'dbpedia_id', 'dbpedia_label', 'dbpedia_raw_result'], ignore_index=True )
为什么之前的方法无效?
- 直接用
explode处理原字典列:explode仅对列表/元组类型的单元格有效,你的列元素是字典,所以直接调用会无效。 - 仅执行
apply(pd.Series)但未合并:如果只运行了df['dbpedia_entry'].apply(pd.Series),没有将结果合并回原DataFrame,自然看不到新增的列。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

