如何将列表元素逐一追加到Pandas DataFrame的嵌套列表中(保持结构)
解决方案:Pandas嵌套列表批量追加元素
这里有两种优雅的实现方式,能完美满足你的需求——把列表C的元素逐个追加到DataFrame的B列嵌套列表的每个最内层子列表中,同时保留原有结构和A列的数据:
方法一:使用递归+迭代器(推荐,无全局变量)
这种方式利用Python的迭代器自动追踪元素位置,递归处理不同深度的嵌套列表,代码更简洁健壮:
import pandas as pd d = {'A': [1,2,3,4], 'B': [[[1,2],[2,3]],[[3,4],[2,5]],[[5,6],[5,6],[5,6]],[7,8]]} df = pd.DataFrame(data=d) C = [1,2,3,4,5,6,7,8] # 创建C的迭代器,自动按顺序返回元素 c_iter = iter(C) def append_to_sublists(nested_list): # 判断当前是否为嵌套层级(不是最内层子列表) if isinstance(nested_list[0], list): # 递归处理每个子层级 return [append_to_sublists(sublist) for sublist in nested_list] else: # 从迭代器取下一个元素,追加到当前子列表 return nested_list + [next(c_iter)] # 应用函数更新B列 df['B'] = df['B'].apply(append_to_sublists) # 验证结果 print(df['B'].tolist())
方法二:使用递归+全局计数器
如果你对迭代器不太熟悉,也可以用全局计数器手动追踪元素位置,逻辑更直观:
import pandas as pd d = {'A': [1,2,3,4], 'B': [[[1,2],[2,3]],[[3,4],[2,5]],[[5,6],[5,6],[5,6]],[7,8]]} df = pd.DataFrame(data=d) C = [1,2,3,4,5,6,7,8] # 初始化计数器,跟踪当前要取C的第几个元素 c_idx = 0 def append_to_sublists(nested_list): global c_idx if isinstance(nested_list[0], list): return [append_to_sublists(sublist) for sublist in nested_list] else: # 追加元素后,计数器+1 new_sublist = nested_list + [C[c_idx]] c_idx += 1 return new_sublist df['B'] = df['B'].apply(append_to_sublists)
结果说明
两种方法最终都会得到你想要的B列结构:
[[[1,2,1],[2,3,2]],[[3,4,3],[2,5,4]],[[5,6,5],[5,6,6],[5,6,7]],[7,8,8]]
A列的数据会完全保留,不受任何影响。
内容的提问来源于stack exchange,提问作者Seiji
相关产品推荐
相关产品推荐

