如何合并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
相关产品推荐
相关产品推荐

