You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并Pandas中两列的列表数据?

解决方法

可以用自定义函数结合apply逐行处理,完美匹配你的需求:

1. 构造示例DataFrame

先还原你给出的测试数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': [[1,2,3], [4,6], [7,11], None, [], np.nan],
    'col2': [[4,5,6], 43, np.nan, [9,9], [13,17], np.nan]
})

2. 定义合并逻辑的函数

这个函数会处理NaN、None、单个元素、空列表等各种情况:

def merge_lists(row):
    merged = []
    # 处理col1的内容
    val1 = row['col1']
    if pd.notna(val1) and val1 is not None:
        # 如果是列表/元组就直接扩展,单个元素就添加进去
        if isinstance(val1, (list, tuple)):
            merged.extend(val1)
        else:
            merged.append(val1)
    # 处理col2的内容,逻辑和col1一致
    val2 = row['col2']
    if pd.notna(val2) and val2 is not None:
        if isinstance(val2, (list, tuple)):
            merged.extend(val2)
        else:
            merged.append(val2)
    # 如果合并后是空列表,返回NaN,否则返回合并结果
    return merged if merged else np.nan

3. 应用函数生成col3

调用apply逐行执行合并逻辑:

df['col3'] = df.apply(merge_lists, axis=1)

最终结果

运行后得到的DataFrame如下:

col1        col2                     col3
0  [1, 2, 3]  [4, 5, 6]  [1, 2, 3, 4, 5, 6]
1     [4, 6]          43           [4, 6, 43]
2    [7, 11]         NaN              [7, 11]
3       None     [9, 9]                 [9, 9]
4         []  [13, 17]           [13, 17]
5        NaN         NaN                   NaN

关键点说明

  • 同时判断pd.notna()和is not None:覆盖Pandas中NaN和Python原生None两种空值情况
  • 区分列表/元组和单个元素:确保像43这种非列表值能被正确加入结果
  • 空结果返回NaN:匹配你最后一行全空的需求

内容的提问来源于stack exchange,提问作者amnesic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:40:42