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

如何在df.iterrows()中通过单行代码批量分配行数据变量?

解决方法

方法1:直接解包(直观高效,适合列数不多的场景)

把需要的列值按顺序直接解包到对应变量,一行完成赋值:

for idx, row in df.iterrows():
    date, n_apple, n_cherry, n_banana = row['date'], row['apple'], row['cherry'], row['banana']
    # 后续直接使用变量即可

如果列名过长,可先把目标列名存成列表,通过列表推导生成值列表后解包:

target_cols = ['date', 'apple', 'cherry', 'banana']
for idx, row in df.iterrows():
    date, n_apple, n_cherry, n_banana = [row[col] for col in target_cols]

方法2:动态生成变量(适合列数较多的场景)

用exec动态拼接赋值语句,不用逐个手写变量名:

cols = ['apple', 'cherry', 'banana']
# 拼接变量赋值语句
assign_code = ", ".join([f'n_{col}' for col in cols]) + " = " + ", ".join([f'row["{col}"]' for col in cols])

for idx, row in df.iterrows():
    exec(assign_code)
    # 直接使用n_apple、n_cherry、n_banana变量

⚠️ 注意:exec会执行任意代码,不要用于处理不可信的外部输入,避免安全风险。

方法3:命名元组封装(规范整洁,避免变量污染)

如果不想生成零散变量,用namedtuple把相关值封装成对象,通过属性访问更清晰:

from collections import namedtuple

# 定义命名元组结构,字段名对应目标变量名
FruitRecord = namedtuple('FruitRecord', ['date', 'n_apple', 'n_cherry', 'n_banana'])

for idx, row in df.iterrows():
    record = FruitRecord(row['date'], row['apple'], row['cherry'], row['banana'])
    # 通过属性访问:record.date、record.n_apple

额外提示:尽量避免使用iterrows()

iterrows()的遍历性能偏低,若数据量较大,更推荐用df.apply()或矢量化操作替代:

def process_row(row):
    date = row['date']
    n_apple = row['apple']
    # 编写你的行处理逻辑
    return processed_result

df['processed_result'] = df.apply(process_row, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:42:43