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

DataFrame作为参数传递后无法调用.loc方法的问题排查

问题分析与解决方案

核心错误原因

  1. 实例方法参数缺失:_validate_eyes_available是类的实例方法,但定义时未将self作为第一个参数。这会导致调用时传入的data_frame被错误当作self,方法内部实际拿到的不是DataFrame对象,自然没有loc属性。
  2. 调用参数不匹配:调用_validate_eyes_available时只传了data_frame,但方法定义需要data_frame和index两个参数,参数缺失引发逻辑混乱。
  3. 循环删除行的逻辑缺陷:在for i in range(len(data_frame))循环中直接删除行,会导致DataFrame索引错位,后续循环的i无法对应正确的行。

修正后的代码

def _validate_result_for_attribute(self, result_file, test_summary):
    
    data_frame = GazeTest.get_data_frame_from_csv(result_file) 
    # 先收集需要删除的索引,避免循环中删除导致的索引混乱
    indices_to_drop = []
    for index in data_frame.index:
        if not self._validate_eyes_available(data_frame, index):
            indices_to_drop.append(index)
    # 一次性删除所有目标行
    data_frame = data_frame.drop(indices_to_drop)
  
    self._update_test_case_fields(data_frame, result_file, test_summary)
    

def _validate_eyes_available(self, data_frame, index):
    # 检查双眼状态是否可用
    if (data_frame.loc[index, RIGHT_EYE_STATUS] == 1 and
        data_frame.loc[index, LEFT_EYE_STATUS] == 1):  
        return True
    else:
        return False

关键修正点

  • 给_validate_eyes_available添加self参数,符合类实例方法的定义规范。
  • 调用_validate_eyes_available时传入index参数,匹配方法的参数要求。
  • 改为先收集要删除的索引再一次性删除,避免循环中修改DataFrame导致的索引错位问题。

内容的提问来源于stack exchange,提问作者Eoin O'Reilly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:42:53