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

Pandas解析DataFrame:拆分列表字段为多行并匹配对应表名

问题原因

你之前使用的多列拆分代码失效,核心原因是Field_Names列存储的不是原生Python列表对象,而是字符串格式的列表文本。
当列内元素是字符串而非可迭代的列表时,调用apply(pd.Series)会把整个字符串识别为单个值,无法按列表元素拆分;同时Table_Name列本身就是普通字符串值,两列拆分后再拼接,自然和原输入完全一致。

正确实现方法

分两步处理即可:

  1. 先将字符串格式的列表文本转为原生Python列表
  2. 对列表列做行展开,自动重复填充对应的Table_Name值

推荐写法(pandas 0.25及以上版本支持)

用pandas内置的explode方法实现,代码最简洁:

import pandas as pd
import ast

# 安全转换字符串格式的列表为原生列表对象
df['Field_Names'] = df['Field_Names'].apply(ast.literal_eval)

# 按列表元素拆分为行,重置索引
df_parsed = df.explode('Field_Names', ignore_index=True)

老版本pandas兼容写法

如果你的pandas版本低于0.25没有explode方法,可以用修正后的stack逻辑实现:

import pandas as pd
import ast

df['Field_Names'] = df['Field_Names'].apply(ast.literal_eval)
df_parsed = df.set_index('Table_Name')['Field_Names']\
    .apply(pd.Series).stack()\
    .reset_index(level=1, drop=True)\
    .reset_index(name='Field_Names')

处理完成后输出的结果完全符合预期:每个字段名单独占一行,对应Table_Name自动重复填充,总列数保持2列不变。

注意:不要直接用eval()转换字符串列表,ast.literal_eval()只会解析合法的Python字面量,不会执行任意代码,安全性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:06:18