pandas如何将DataFrame多行存储的列表合并为一个大列表
pandas合并DataFrame行内列表为单个大列表
问题场景
当pandas DataFrame的某一列存储的是列表类型数据时,需要将所有行的列表元素拼接成一个扁平的一维大列表。
示例输入DataFrame结构:
fruits 0 [apple, banana, orange] 1 [berry, lemon] 2 [apple, tomato] 3 [lime, orange, banana]
预期输出结果:
['apple', 'banana', 'orange', 'berry', 'lemon', 'apple', 'tomato', 'lime', 'orange', 'banana']
可用实现方案
以下方案均能得到预期结果,可根据数据量和使用习惯选择:
快速写法(百行级数据首选,代码最短)
直接调用列的sum方法,传入空列表作为初始值,会逐行拼接所有列表:merged_list = df['fruits'].sum([])提示:数据量超过万行时不推荐这个方法,列表逐次拼接会产生较多临时对象,性能较差。
通用高性能写法(全数据量适用,推荐优先用)
用两层嵌套的列表推导式直接遍历提取元素,没有额外依赖,性能稳定:merged_list = [item for single_list in df['fruits'] for item in single_list]低内存写法(超大数据量适用)
用Python标准库itertools的链式迭代工具,不会生成中间临时列表,内存占用更低:from itertools import chain merged_list = list(chain.from_iterable(df['fruits']))pandas原生写法(可读性高)
用pandas自带的explode方法先把列表拆分为单元素行,再直接转列表:merged_list = df['fruits'].explode().tolist()
扩展:如果需要对合并后的结果去重,不需要保留原有顺序可以直接用
list(set(merged_list));如果需要保留元素首次出现的顺序,可以用list(dict.fromkeys(merged_list))实现。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

