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
相关产品推荐
相关产品推荐

