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

如何在Pandas DataFrame中拆解列表嵌套元组列并转长格式

拆解Pandas DataFrame中嵌套列表列为长格式

我懂你现在的困扰——要把DataFrame里存着嵌套元组的列表列拆成多行,转换成长格式对吧?其实用Pandas自带的方法就能轻松解决,我给你一步步演示:

首先,先把你给出的输入数据构造成可运行的DataFrame(注意元组里的字符串要加引号,不然会报错):

import pandas as pd

# 构造输入的DataFrame
df = pd.DataFrame({
    'index': [0, 1],
    'element': [
        [[('A', 'A'), ('B', 'B')], [('B', 'B'), ('C', 'C')]],
        [[('A', 'A'), ('D', 'D')], [('D', 'D'), ('L', 'L')], [('L', 'L'), ('O', 'O')]]
    ],
    'Lanes': ['M', 'B'],
    'Category': [1, 2]
})

接下来,核心操作就是用explode()方法,它专门用来处理包含列表的列,把列表中的每个元素拆成单独一行,同时保留其他列的对应值:

# 拆解element列,生成长格式DataFrame
result = df.explode('element').reset_index(drop=True)

# 如果你需要把每个子列表转换成类似"(A,A), (B,B)"的字符串格式,加上这一步
result['element'] = result['element'].apply(lambda x: ', '.join(map(str, x)))

最后打印结果,就是你想要的长格式啦:

print(result)

输出结果:

index                element Lanes  Category
0      0  ('A', 'A'), ('B', 'B')     M         1
1      0  ('B', 'B'), ('C', 'C')     M         1
2      1  ('A', 'A'), ('D', 'D')     B         2
3      1  ('D', 'D'), ('L', 'L')     B         2
4      1  ('L', 'L'), ('O', 'O')     B         2

简单解释下:explode()会自动遍历element列里的每个外层列表,把里面的每个子列表单独拆成一行,其他列(比如Lanes、Category)会跟着重复对应的值。如果不需要把列表转成字符串,直接用df.explode('element')就可以,此时element列会保留列表类型;如果要和你期望的格式完全一致,就用apply把列表转换成拼接后的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:27:02