You need to enable JavaScript to run this app. pandas使用lambda切分列时btts_y转float报ValueError求助
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用lambda切分列时btts_y转float报ValueError求助

错误根因
  • 原代码对两列硬编码了相同的拆分分隔符:btts_x的两个值用双换行\n\n分隔,btts_y的两个值用单换行\n分隔。硬按\n\n拆分btts_y时,每个单元格根本不会被切开,最终整个带单换行的字符串被传入astype(float)流程,才抛出无法转float的ValueError。
  • 爬取的网页内容里换行符格式不统一是常见问题,不需要对两列单独适配拆分逻辑,统一匹配所有连续换行即可。
可落地的实现方案

方案1:嵌入re.sub的lambda实现(匹配你最初的实现思路)

统一将所有连续换行符替换为固定分隔标记后再拆分,不用区分两列的换行差异:

import re
import pandas as pd

def results(frame):
    # 通用拆分逻辑:匹配1个及以上任意数量的换行符,替换后拆分
    split_by_newline = lambda raw_str: re.sub(r'\n+', '#', raw_str).split('#')

    for col_name, col_prefix in [('btts_x', 'btts_x'), ('btts_y', 'btts_y')]:
        split_df = frame[col_name].apply(split_by_newline).apply(pd.Series)
        split_df.columns = [f'{col_prefix}_1', f'{col_prefix}_2']
        frame = pd.concat([frame, split_df.astype(float)], axis=1)
    return frame

正则规则说明:r'\n+'可以匹配单个\n、连续两个\n甚至更多连续换行的场景,完全兼容你当前两列的格式差异,不会出现拆分失效的问题。

方案2:更简洁的pandas原生实现(无需手动写apply流程)

利用pandas字符串方法自带的正则拆分能力,代码更短、运行效率更高:

import pandas as pd

def results(frame):
    for col_name, col_prefix in [('btts_x', 'btts_x'), ('btts_y', 'btts_y')]:
        # expand=True会直接把拆分后的内容生成独立列
        split_df = frame[col_name].str.split(r'\n+', expand=True).astype(float)
        split_df.columns = [f'{col_prefix}_1', f'{col_prefix}_2']
        frame = pd.concat([frame, split_df], axis=1)
    return frame
适配示例数据的运行效果

处理完成后会完整生成所有拆分列,完全匹配你需要的数值计算前置要求:

Teams_xbtts_xTeams_ybtts_ybtts_x_1btts_x_2btts_y_1btts_y_2
Leicester City vs Manchester United1.55\n\n2.40Leicester City vs Manchester United1.50\n2.401.552.401.502.40
Aston Villa vs Crystal Palace1.68\n\n2.14Aston Villa vs Crystal Palace1.60\n2.201.682.141.602.20
Fulham vs Southampton1.72\n\n2.08Fulham FC vs Southampton FC1.70\n2.001.722.081.702.00
Arsenal vs Chelsea1.79\n\n1.98Arsenal FC vs Chelsea FC1.70\n2.001.791.981.702.00

内容的提问来源于stack exchange,提问作者stephen.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 11:06:04