求助:使用For循环下载CSV文件时Pandas出现Error tokenizing data错误
解决CSV解析错误(ParserError)的方案
这个错误是因为目标CSV文件存在注释行或格式异常,导致pandas默认解析规则无法正确识别字段。以下是具体修复步骤:
1. 修正CSV读取参数,处理注释与格式问题
在pd.read_csv中添加参数跳过注释行、显式指定分隔符,避免解析异常:
df = pd.read_csv( f"http://www.football-data.co.uk/mmz4281/{i}{i+1}/{league}.csv", comment='#', # 跳过以#开头的注释行 sep=',', # 显式指定分隔符为逗号 on_bad_lines='skip' # 跳过格式错误的行(可选) )
2. 更新列名匹配逻辑
原代码使用的Full time home goals等列名已被数据源改为缩写(如FTHG代表全场主队进球、FTAG代表全场客队进球),需同步修改列选择和重命名代码:
# 替换原有的列选择与重命名代码 df = df[['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG']] df = df.rename(columns={'FTHG': 'HomeGoals', 'FTAG': 'AwayGoals'})
完整修复后的代码
import pandas as pd leagues_short=['SP1', 'D1', 'E0', 'I1'] # 西甲、德甲、英超、意甲 dict_historical_data = {} for league in leagues_short: frames = [] for i in range(15, 21): df = pd.read_csv( f"http://www.football-data.co.uk/mmz4281/{i}{i+1}/{league}.csv", comment='#', sep=',', on_bad_lines='skip' ) df = df[['Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG']] df = df.rename(columns={'FTHG': 'HomeGoals', 'FTAG': 'AwayGoals'}) df = df.assign(Season=i) frames.append(df) df_historical_data = pd.concat(frames) dict_historical_data[league] = df_historical_data
补充说明
- 数据源的CSV文件开头通常有几行
#开头的注释说明,pandas默认会将其当作数据行解析,导致字段数量不匹配,comment='#'参数可直接跳过这些行。 - 当前数据源已统一使用缩写列名,必须更新列选择逻辑才能正确提取目标数据。
内容的提问来源于stack exchange,提问作者mrweird777
相关产品推荐
相关产品推荐

