You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python DataFrame中explode函数无法正常使用的问题

解决DataFrame中explode函数无效的问题

问题根源

你的category_for列表面呈现列表格式,但实际大概率是字符串类型(比如数据读取时未自动解析为Python列表/字典对象),导致explode无法识别并拆分元素,因此没有效果。

解决方案

先将字符串格式的列表转换为Python原生的列表+字典结构,再执行explode和列展开操作:

步骤1:导入必要模块

import pandas as pd
import ast

步骤2:解析字符串为Python对象

# 将字符串格式的列表转换为实际的列表/字典结构
df['category_for'] = df['category_for'].apply(ast.literal_eval)

步骤3:执行explode并展开字典列

# 拆分列表中的每个字典元素
df_exploded = df.explode('category_for')
# 将字典列拆分为id和name两列
df_final = pd.concat([df_exploded.drop('category_for', axis=1), df_exploded['category_for'].apply(pd.Series)], axis=1)

完整可运行代码

import pandas as pd
import ast

# 模拟你的原始数据
data = {
    'pub_id': ['pub.1155807502', 'pub.1153826092', 'pub.1145064359', 'pub.1145747691', 'pub.1144315107'],
    'category_for': [
        "[{'id': '80003', 'name': '32 Biomedical and Clinical Sciences'}, {'id': '80045', 'name': '3202 Clinical Sciences'}]",
        "[{'id': '80003', 'name': '32 Biomedical and Clinical Sciences'}, {'id': '80232', 'name': '5202 Biological Psychology'}, {'id': '80045', 'name': '3202 Clinical Sciences'}, {'id': '80052', 'name': '3209 Neurosciences'}, {'id': '80023', 'name': '52 Psychology'}]",
        "[{'id': '80003', 'name': '32 Biomedical and Clinical Sciences'}, {'id': '80052', 'name': '3209 Neurosciences'}, {'id': '80045', 'name': '3202 Clinical Sciences'}]",
        "[{'id': '80003', 'name': '32 Biomedical and Clinical Sciences'}, {'id': '80052', 'name': '3209 Neurosciences'}, {'id': '80045', 'name': '3202 Clinical Sciences'}]",
        "[{'id': '80003', 'name': '32 Biomedical and Clinical Sciences'}, {'id': '80232', 'name': '5202 Biological Psychology'}, {'id': '80045', 'name': '3202 Clinical Sciences'}, {'id': '80052', 'name': '3209 Neurosciences'}, {'id': '80023', 'name': '52 Psychology'}]"
    ]
}

df = pd.DataFrame(data)

# 解析字符串为Python对象
df['category_for'] = df['category_for'].apply(ast.literal_eval)

# 执行拆分和展开
df_exploded = df.explode('category_for')
df_final = pd.concat([df_exploded.drop('category_for', axis=1), df_exploded['category_for'].apply(pd.Series)], axis=1)

print(df_final)

验证方法

可以先检查category_for列的元素类型,确认是否为字符串:

print(df['category_for'].apply(type).unique())

如果输出包含<class 'str'>,就说明必须先做解析操作才能让explode生效。

内容的提问来源于stack exchange,提问作者Clara HL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:37:31