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

Pandas处理DataFrame报AttributeError,对应代码功能是什么?

代码功能说明

这段代码的作用是筛选出home_odds(主胜赔率)、draw_odds(平局赔率)、away_odds(客胜赔率)三个字段全部包含斜杠/符号的行,最终返回一个与原DataFrame长度相同的布尔序列m,符合条件的行对应值为True,不符合为False。
逐段拆解逻辑:

  • 先选中三个赔率字段组成子DataFrame
  • agg(lambda x: x.str.count('/'), 1):按行遍历,统计每行三个字段中斜杠的出现次数
  • .ne(0):将统计结果转换为布尔值,斜杠数不等于0返回True,否则返回False
  • .all(1):按行判断三个字段的布尔值是否全为True,仅当三个字段都包含斜杠时最终返回True
报错原因

报错提示AttributeError: Can only use .str accessor with string values!,核心原因是测试用的DataFrame片段中三个赔率字段的类型为浮点型,无法调用字符串专属的.str访问器。
完整数据集可正常运行的原因是:完整数据中存在带斜杠的字符串格式赔率,pandas会将整列推断为object(字符串)类型,支持.str调用;而你使用的测试片段里赔率全是纯数字,pandas将三列推断为浮点型,因此调用.str时报错。

修复方案

执行统计前先将三个赔率字段强制转换为字符串类型即可,优化后的代码如下:

odds_cols = ['home_odds', 'draw_odds', 'away_odds']
# 强制转换为字符串类型
df[odds_cols] = df[odds_cols].astype(str)
# 执行原有逻辑,也可替换为更高效的contains判断
m = df[odds_cols].apply(lambda x: x.str.contains('/'), axis=1).all(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:08