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

Pandas如何新增列并将两列值转为列表,输出records格式字典数组?

Pandas生成行内列表列并转换为records格式字典数组

问题场景

现有如下Pandas DataFrame:

import pandas as pd

d = {'a_lower': [1, 2], 'a_upper': [3, 4]}
df = pd.DataFrame(data=d)

输出结果:

a_lower  a_upper
0        1        3
1        2        4

需求是新增一列a,每行的值为对应行a_lower和a_upper组成的列表,期望结果:

a_lower  a_upper            a
0        1        3        [1, 3]
1        2        4        [2, 4]

尝试执行df['a'] = [df['a_lower'], df['a_upper']]后得到错误结果:

a_lower  a_upper                                                  a
0        1        3  0    1\n1    2\nName: a_lower, dtype: int64
1        2        4  0    3\n1    4\nName: a_upper, dtype: int64

错误原因

直接将两个Series组成的列表赋值给新列,会把整个Series对象作为每行的值,而非提取每行对应的两个元素组成列表,导致结果不符合预期。

正确实现方法

以下三种方法均可实现需求:

方法1:使用apply逐行处理

通过apply遍历每一行,将指定列的值组成列表:

df['a'] = df.apply(lambda row: [row['a_lower'], row['a_upper']], axis=1)

方法2:使用zip打包列元素

利用zip将两列的对应元素配对,再转换为列表:

# 生成元组列表,若需要列表类型则额外转换
df['a'] = [list(pair) for pair in zip(df['a_lower'], df['a_upper'])]

方法3:使用agg聚合行元素

通过agg方法对指定列按行聚合为列表:

df['a'] = df[['a_lower', 'a_upper']].agg(list, axis=1)

转换为records格式字典数组

完成列添加后,使用to_dict('records')方法将DataFrame转换为目标格式的字典数组:

result = df.to_dict('records')
print(result)

输出结果:

[{'a_lower': 1, 'a_upper': 3, 'a': [1, 3]}, {'a_lower': 2, 'a_upper': 4, 'a': [2, 4]}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:32