如何仅展开Pandas DataFrame列表中的嵌套子列表?
解决方案
可以通过自定义函数识别并拆分嵌套子列表,再结合explode方法实现需求:
import pandas as pd df = pd.DataFrame({"a" : [1,2], "b" : [['a','b',['c','d']],['a',['b','c']]]}) def expand_nested_list(lst): # 分离列表中的非嵌套元素和嵌套子列表 non_nested_elements = [] nested_sub_list = None for elem in lst: if isinstance(elem, list): nested_sub_list = elem else: non_nested_elements.append(elem) # 将非嵌套元素与嵌套子列表的每个元素组合,生成新列表集合 return [non_nested_elements + [sub_elem] for sub_elem in nested_sub_list] # 对b列应用自定义函数,生成待展开的列表集合 df['b'] = df['b'].apply(expand_nested_list) # 展开列表生成重复行 df2 = df.explode('b').reset_index(drop=True) print(df2)
代码说明
- 自定义拆分函数:
expand_nested_list遍历输入列表,区分普通元素和嵌套子列表,将普通元素与嵌套子列表中的每个元素分别组合,生成多个新列表。 - 应用函数:通过
apply将拆分逻辑作用到b列的每个元素上,此时b列的每个值变为包含多个结果列表的集合。 - 展开生成多行:使用
explode方法将b列的列表集合展开为单独行,a列的对应值会自动重复,最终得到目标DataFrame。
内容的提问来源于stack exchange,提问作者GLADOS
相关产品推荐
相关产品推荐

