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

能否用一行列表推导式为Pandas DataFrame生成两列?

用列表推导式同时定义Pandas DataFrame的两列

当然可以用一行列表推导式同时给DataFrame的两列赋值,你之前的写法问题在于没有正确解包推导式生成的二维结构。

为什么你的写法失败?

  • 第一种写法[i, i**2 for i in list]是语法错误:列表推导式中如果要生成多元素组合,需要用括号把每组元素包起来,比如(i, i**2)或者[i, i**2]。
  • 第二种写法[[i, i**2] for i in list]会生成二维列表(如[[0,0], [1,1], [2,4], ...]),但直接用df["columnA"], df["columnB"] = ...时,Python会尝试把这个长度为5的列表拆给2个变量,因数量不匹配报错。

正确的写法

你可以用zip(*...)解包二维结构,把每组元素的第一个值、第二个值分别提取为两个序列,赋值给对应列:

import pandas as pd

lst = [0, 1, 2, 3, 4]  # 避免用list作为变量名,会覆盖内置类型
df = pd.DataFrame()

# 用zip解包列表推导式的结果
df["columnA"], df["columnB"] = zip(*[(i, i**2) for i in lst])

如果是新建DataFrame,也可以直接用列表推导式生成行数据,一次性创建两列:

df = pd.DataFrame([(i, i**2) for i in lst], columns=["columnA", "columnB"])

验证结果

运行代码后,df内容如下:

columnAcolumnB
000
111
224
339
4416

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:55:25