You need to enable JavaScript to run this app. 如何处理Pandas输出DataFrame时空值列被自动跳过的问题
优惠活动
大模型
产品
解决方案
定价
更多

如何处理Pandas输出DataFrame时空值列被自动跳过的问题

问题根因

你遇到的score列缺失问题由两个错误导致:

  1. GameData类初始化时未定义score属性,将类实例转换为DataFrame时该字段不存在,会被直接忽略
  2. parse_data函数内的score取值逻辑完全错误:硬编码score = None后判断非空就返回,永远无法正确读取比分,还会提前中断循环

修改方案

1. 修正GameData类定义

给GameData类的初始化方法新增score列表属性:

class GameData:
    def __init__(self):
        self.date = []
        self.time = []
        self.country = []
        self.league = []
        self.game = []
        self.score = [] # 新增score属性
        self.home_odds = []
        self.draw_odds = []
        self.away_odds = []

2. 修正parse_data内的score取值逻辑

删除原来的错误逻辑,从行数据中读取比分,无值时填充空值:

for row in df.itertuples():
    if not isinstance(row[1], str):
        continue
    elif ':' not in row[1]:
        country = row[1].split('»')[0]
        continue
    game_time = row[1]
    game_date = row[1].split('-')[0]     
    # 修正score取值逻辑:row[3]为比分列,无有效值时填充pd.NA
    score = row[3] if pd.notna(row[3]) else pd.NA
    # 删除原来的错误提前返回逻辑
    game_data.date.append(game_date)
    game_data.time.append(game_time)
    game_data.country.append(country)
    game_data.league.append(count[1].text)
    game_data.game.append(row[2])
    game_data.score.append(score)
    game_data.home_odds.append(row[4])
    game_data.draw_odds.append(row[5])
    game_data.away_odds.append(row[6])

3. 可选优化:兼容高版本Pandas的合并逻辑

高版本Pandas已经废弃DataFrame.append方法,建议替换为pd.concat提升运行效率和版本兼容性:

if __name__ == '__main__':
    start_url = "https://www.oddsportal.com/matches/soccer/"
    browser = webdriver.Chrome()
    urls = get_urls(browser, start_url)
    urls.insert(0, start_url)
    result_list = [] # 用列表存所有单页结果,最后统一合并
    for number, url in enumerate(urls):
        if number > 0:
            browser.get(url)
        html = browser.page_source
        game_data = parse_data(html)
        if game_data is None:
            continue
        result = pd.DataFrame(game_data.__dict__)
        result_list.append(result)
    # 最后一次性合并所有数据
    results = pd.concat(result_list, ignore_index=True)

修改完成后生成的DataFrame就会完整保留score列,无比分的行对应值会自动填充为空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 09:45:04