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

DataFrame逐行应用函数报错:如何传入完整DataFrame作为参数?

问题分析与解决方案

代码里的核心问题

  1. 笔误错误:load_data函数里的df_gt.apply是笔误,应写成df.apply,否则会报变量未定义错误
  2. 参数类型误解:使用df.apply(func, axis=1)时,传入func的是单行的Series对象,不是完整DataFrame。你在name_list里把它当成DataFrame处理(比如df[['item_name']]循环),必然触发错误
  3. 循环逻辑错误:即便处理单行Series,for column in df[['item_name']]遍历的是列名,不是item_name的具体值,完全不符合需求
  4. 变量初始化错误:names在循环内部初始化,每次循环都会被清空,最终只能得到最后一个添加的值

方案1:仅处理每行item_name(无需完整DataFrame)

如果逻辑只需要当前行的item_name值,修改函数和调用方式即可:

import json
import pandas as pd

def load_data(data_file):
    with open(data_file, 'r', encoding='utf8') as d:
       data = json.load(d)
    df = pd.DataFrame.from_dict(data)
    # 逐行应用函数,新增names_list列
    df['names_list'] = df.apply(name_list, axis=1)
    return df

def name_list(row):
    # 直接获取当前行的item_name值
    item_name = row['item_name']
    names = []
    # 这里写入你的逻辑校验与处理代码,示例:
    if '生鲜' in item_name:
        names.append('食品类')
    if '电子' in item_name:
        names.append('数码类')
    return names

方案2:需要传入完整DataFrame(处理逻辑依赖全量数据)

如果逻辑必须用到整个DataFrame的其他数据(比如跨行关联校验),无需使用apply(axis=1),直接把完整DataFrame传入函数处理:

import json
import pandas as pd

def load_data(data_file):
    with open(data_file, 'r', encoding='utf8') as d:
       data = json.load(d)
    df = pd.DataFrame.from_dict(data)
    # 直接传入完整DataFrame
    df = name_list(df)
    return df

def name_list(df):
    names_list = []
    # 遍历完整DataFrame的每一行
    for idx, row in df.iterrows():
        item_name = row['item_name']
        names = []
        # 你的逻辑校验与处理代码,示例:
        if len(item_name) > 6:
            names.append('长命名')
        else:
            names.append('短命名')
        names_list.append(names)
    # 新增目标列
    df['names_list'] = names_list
    return df

额外提示

  • 如果处理逻辑可以向量化(无需逐行循环),优先用pandas的向量化操作,比apply或iterrows效率高得多。比如用df['item_name'].str.contains()直接生成结果列
  • 调试时可以在函数里先打印参数类型(比如print(type(row))),能快速明确传入的数据结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:28