如何将Pandas DataFrame中含列表的行拆分为单个元素行?
解决Pandas DataFrame列表列展开后仍为单元素列表的问题
针对你遇到的df.explode('col2')后col2仍为单元素列表的情况,可按以下步骤处理:
1. 先确认col2列的元素类型
首先检查col2的元素是否为嵌套列表(比如原数据中col2实际结构是[[0],[1],[2]]而非[0,1,2]),或是字符串形式的列表(比如"[0,1,2]")。
执行以下代码查看元素类型:
print(df['col2'].apply(type).unique())
2. 对应解决方案
方案一:如果是嵌套列表(元素为单元素列表)
连续使用两次explode即可彻底展开:
df = df.explode('col2').explode('col2')
方案二:如果是字符串形式的列表
先将字符串转换为真正的Python列表,再执行explode:
import ast # 把字符串格式的列表转为可迭代的Python列表 df['col2'] = df['col2'].apply(ast.literal_eval) # 展开列表元素为单独行 df = df.explode('col2')
方案三:通用展开方法(适配所有可迭代元素)
如果上述方法无效,可使用apply+stack的方式强制展开:
df = df.set_index('col1')['col2'].apply(pd.Series).stack().reset_index(name='col2').drop('level_1', axis=1)
示例验证
以你的原数据结构为例,假设原DataFrame为:
import pandas as pd df = pd.DataFrame({ 'col1': [0,1,1], 'col2': [[[0],[1],[2],[3],[4]], [[0]], [[1],[2]]] })
执行方案一代码后,即可得到你期望的结果:
col1 col2 0 0 0 0 0 1 0 0 2 0 0 3 0 0 4 1 1 0 2 1 1 2 1 2
内容的提问来源于stack exchange,提问作者propotato
相关产品推荐
相关产品推荐

