pandas read_csv读取远程CSV触发IncompleteRead错误求解决
解决IncompleteRead错误的可行方案
这个错误是网络传输时数据未完整接收导致的,和本地Python/pandas版本、设备无关,以下是几种解决办法:
手动下载文件后读取
直接访问目标链接下载data.csv到本地,然后修改代码读取本地文件:df_commuter = pd.read_csv("本地文件路径/data.csv") df_commuter.head()这是最稳妥的方案,彻底绕开网络传输问题。
用requests加重试机制获取完整数据
pandas自带的URL读取逻辑没有重试机制,改用requests库实现带重试的请求,确保数据完整接收:import pandas as pd import requests from io import StringIO from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry # 配置会话,添加重试策略 session = requests.Session() retry_strategy = Retry( total=5, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504] ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount("https://", adapter) session.mount("http://", adapter) # 获取数据并读取 url = "https://github.com/uber-web/kepler.gl-data/raw/master/ukcommute/data.csv" response = session.get(url) response.raise_for_status() # 抛出请求错误 df_commuter = pd.read_csv(StringIO(response.text)) df_commuter.head()分块读取大文件
针对大文件传输易中断的情况,用pandas的chunksize参数分块读取,同时设置超时:import pandas as pd url = "https://github.com/uber-web/kepler.gl-data/raw/master/ukcommute/data.csv" # 分块读取,每块10000行,超时30秒 chunk_iter = pd.read_csv(url, chunksize=10000, timeout=30) df_commuter = pd.concat(chunk_iter, ignore_index=True) df_commuter.head()
内容的提问来源于stack exchange,提问作者SeF
相关产品推荐
相关产品推荐

