如何为Pandas DataFrame生成符合要求的嵌套列表列C?
解决DataFrame生成嵌套列表列的问题
我明白你的问题了——你想要把每行的A和B值分别包裹成单个元素的列表,再组合成一个外层列表,但之前的代码把整行的两个值放到了同一个子列表里。咱们来修正这个问题:
问题根源
你之前用的代码:
df['C'] = [[x] for x in df[['A', 'B']].values.tolist()]
这里df[['A', 'B']].values.tolist()会把每行转换成[A值, B值]的列表,再用[[x]]包裹后,就变成了[[A值, B值]],这和你需要的[[A值], [B值]]结构不符。
解决方案
下面提供几种简单有效的方法:
方法1:使用zip遍历列值(推荐,效率较高)
直接遍历A和B列的每个值,分别包裹成子列表后再组合:
import pandas as pd # 先创建示例DataFrame df = pd.DataFrame({'A': [2.3, 5.6, 8.2], 'B': [6.4, 2.8, 9.0]}) # 生成列C df['C'] = [[[a], [b]] for a, b in zip(df['A'], df['B'])]
方法2:使用apply逐行处理
利用apply函数对每行进行自定义转换:
df['C'] = df.apply(lambda row: [[row['A']], [row['B']]], axis=1)
方法3:遍历values二维数组
如果习惯操作values数组,可以对每行的每个元素单独包裹:
df['C'] = [[[val] for val in row] for row in df[['A', 'B']].values]
验证结果
执行上述任意一种方法后,你的DataFrame会变成预期的格式:
A B C 0 2.3 6.4 [[2.3], [6.4]] 1 5.6 2.8 [[5.6], [2.8]] 2 8.2 9.0 [[8.2], [9.0]]
内容的提问来源于stack exchange,提问作者KOB
相关产品推荐
相关产品推荐

