使用Pandas从URL读取足球数据CSV时遇解析错误及问题求助
解决football-data CSV解析与合并的问题
我来帮你拆解一下问题出在哪,以及怎么修复:
第一个错误的根源
你遇到的ParserError: Expected 57 fields in line 305, saw 72,本质是football-data提供的部分CSV文件里,存在被引号包裹的字段(比如球员名字、赛事备注),而这些字段里包含了逗号。Pandas默认的CSV解析器会把这些内部逗号当成列分隔符,导致列数不匹配。你一开始尝试换分隔符没用,因为问题根本不是分隔符不对,而是字段内的特殊字符没被正确识别。
第二个代码的问题
你改用requests获取文本后,错误地用了sep='delimiter'——这个参数是用来指定单一分隔符的,而你写的'delimiter'并不是实际的分隔符(实际是逗号),所以Pandas把整行内容当成了一个列,导致DataFrame形状是(380,1)。之后你尝试取url_data[0],但此时DataFrame的列名可能不是0(比如第一行是表头,列名是CSV的原始表头),所以触发KeyError: 0。
正确的解决方案
其实不用手动拆分文本,直接给pd.read_csv加几个参数就能解决解析问题,同时处理合并时的列一致性问题:
import os import pandas as pd import csv # 用来处理引号规则 GAMES = ['E0', 'E1', 'E2', 'E3'] def download_statistics(): for year in range(2003, 2020): year_format = str(year)[-2:] + str(year+1)[-2:] for game in GAMES: file_name = f'{game}.csv' # 读取现有数据(如果存在) previous_data = pd.read_csv(file_name) if os.path.isfile(file_name) else None # 关键:用csv.QUOTE_ALL识别引号包裹的字段,同时跳过解析错误的行 url_data = pd.read_csv( f'http://football-data.co.uk/mmz4281/{year_format}/{game}.csv', quoting=csv.QUOTE_ALL, # 告诉Pandas识别所有被引号包裹的字段 on_bad_lines='skip', # 跳过解析错误的行(避免崩溃) low_memory=False # 关闭低内存模式,避免类型推断警告 ) if previous_data is not None: # 确保列名一致,只保留两者共有的列 common_cols = list(set(previous_data.columns) & set(url_data.columns)) combined_data = pd.concat([ previous_data[common_cols], url_data[common_cols] ]) # 去重(避免重复下载同一行) combined_data = combined_data.drop_duplicates() combined_data.to_csv(file_name, index=False) else: url_data.to_csv(file_name, index=False) if __name__ == '__main__': download_statistics()
关键改进点:
quoting=csv.QUOTE_ALL:让Pandas正确识别被引号包裹的字段,不会把字段内的逗号当成列分隔符。on_bad_lines='skip':跳过极少数确实有格式问题的行(新版本Pandas替代旧的error_bad_lines=False)。- 列名一致性处理:不同年份的CSV可能新增/减少了列,取两者共有的列再合并,避免出现大量NaN或列混乱。
drop_duplicates():避免重复下载同一赛季的数据时,出现重复行。
额外提示
如果还是遇到个别行解析问题,可以尝试指定engine='python'(Pandas默认用C引擎,Python引擎对复杂格式兼容性更好,但速度稍慢):
url_data = pd.read_csv( f'http://football-data.co.uk/mmz4281/{year_format}/{game}.csv', quoting=csv.QUOTE_ALL, on_bad_lines='skip', engine='python' )
内容的提问来源于stack exchange,提问作者nobie_programmer
相关产品推荐
相关产品推荐

