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

DataFrame无explode属性报错求助:调用函数却触发AttributeError

问题:调用DataFrame.explode()触发AttributeError

错误回溯信息

调用栈回溯(最近的调用优先):
  File "train_transformer_v5.py", line 782, in <module>
    main()
  File "train_transformer_v5.py", line 763, in main
    global_step, tr_loss, metrics_result = trainer.train(args)
  File "train_transformer_v5.py", line 451, in train
    tb_writer=self.tb_writer, global_step=self.global_step)
  File "/home/xianx/model/metrics_v5.py", line 596, in eval_metrics
    qps[thr] = metrics_calculator.map_and_compute_qp(pri_nodes[thr], node_mappings, primary_gt_data_path, args)
  File "/home/xianx/model/metrics_v5.py", line 353, in map_and_compute_qp
    qpv2 = self.compute_qp(pred_df, gt_data_path)
  File "/home/xianx/model/metrics_v5.py", line 358, in compute_qp
    pred_df = pred_df.explode('TextNodeId')
  File "/opt/conda/lib/python3.6/site-packages/pandas/core/generic.py", line 5067, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame'对象没有'explode'属性

当前环境版本信息

$ pip install pandas
因普通site-packages不可写,默认使用用户安装
已满足依赖:pandas位于/opt/conda/lib/python3.6/site-packages,版本0.24.2
已满足依赖:pytz>=2011k(来自pandas)位于/opt/conda/lib/python3.6/site-packages,版本2020.1
已满足依赖:python-dateutil>=2.5.0(来自pandas)位于/opt/conda/lib/python3.6/site-packages,版本2.8.1
已满足依赖:numpy>=1.12.0(来自pandas)位于/opt/conda/lib/python3.6/site-packages,版本1.19.1
已满足依赖:six>=1.5(来自python-dateutil>=2.5.0->pandas)位于/opt/conda/lib/python3.6/site-packages,版本1.15.0

相关代码片段

def compute_qp(self, pred_df, gt_data_path):
        pred_df = pred_df.explode('TextNodeId')
        ...

问题原因与解决方案

  • 原因:pandas的explode()方法是在0.25.0版本才正式引入的,你当前使用的pandas版本为0.24.2,不支持该方法,因此触发AttributeError。
  • 解决方案1:升级pandas版本
    执行命令升级到支持explode()的版本:
    pip install --upgrade pandas>=0.25.0
    
    若权限不足,添加--user参数:
    pip install --user --upgrade pandas>=0.25.0
    
  • 解决方案2:手动实现explode功能(不升级版本)
    若无法升级pandas,可使用以下代码替代pred_df.explode('TextNodeId'),同时兼容后续版本升级:
    # 版本兼容写法,自动判断是否支持explode方法
    if hasattr(pred_df, 'explode'):
        pred_df = pred_df.explode('TextNodeId')
    else:
        # 手动展开列表类型的列
        pred_df = pred_df.assign(TextNodeId=pred_df['TextNodeId'].apply(lambda x: x if isinstance(x, list) else [x]))
        pred_df = pred_df.explode('TextNodeId')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:36:32