如何在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
相关产品推荐
相关产品推荐

