Pandas如何将DataFrame中一列的列表元素合并到另一列列表
Pandas 逐行合并两列存储的列表元素方案
问题复现
待处理的DataFrame结构如下,column_A和column_B均存储由字典组成的列表:
import pandas as pd df = pd.DataFrame( { 'column_A': [ [{'zone':'A', 'number':'7'}, {'zone':'B', 'number': '8'}], [{'zone':'A', 'number':'6'}, {'zone':'E', 'number':'7'}] ], 'column_B': [ [{'zone':'C', 'number':'4'}], [{'zone':'D', 'number': '9'}] ] } )
目标是逐行将column_B的列表元素追加到对应行的column_A列表末尾,第一行的预期输出为:
[{'zone':'A', 'number':'7'}, {'zone':'B', 'number': '8'}, {'zone':'C', 'number':'4'}]
直接对整列使用+运算符、调用列表insert方法报错,是因为Pandas默认将列作为Series对象处理,整列运算会走Series的对齐逻辑,不会自动识别元素为列表做逐元素拼接。
可行实现方法
- 方法1:
apply逐行拼接(写法简单,适合小数据集)
按行遍历取出两个列表,直接用Python原生列表+做拼接后赋值回column_A即可:df['column_A'] = df.apply(lambda x: x['column_A'] + x['column_B'], axis=1) - 方法2:列表推导式(性能更高,适合大数据集)
直接用zip同步遍历两列的元素做拼接,避免apply的额外开销,运行速度更快:df['column_A'] = [list_a + list_b for list_a, list_b in zip(df['column_A'], df['column_B'])]
避坑提示
- 不要直接写
df['column_A'] + df['column_B'],该写法会触发Series级别的运算,尝试按索引对齐两列的值,无法实现列表逐行拼接,会抛出类型错误。 - 如果需要保留原始列数据,可将合并结果赋值给新列,例如
df['merged_list']即可。
内容的提问来源于stack exchange,提问作者Mario Fernandez
相关产品推荐
相关产品推荐

