如何解决pandas从URL读取CSV时出现的数据分词报错问题?
问题原因
ARK官网发布的持仓CSV末尾会追加非结构化的版权/日期说明行,列数和表头不匹配,导致pandas默认解析失败,和你判断的最后一行内容动态变化的情况一致。
修复方案
方案1:固定跳过末尾1行(轻量快速)
ARK的持仓CSV末尾固定只有1行无效说明,直接用skipfooter参数跳过即可:
import pandas as pd url = "https://ark-funds.com/wp-content/uploads/funds-etf-csv/ARK_INNOVATION_ETF_ARKK_HOLDINGS.csv" # skipfooter指定跳过最后N行,该参数需要搭配python解析引擎使用 test = pd.read_csv(url, skipfooter=1, engine='python')
方案2:动态过滤有效行(兼容性更强,适配末尾行数变化的场景)
如果后续末尾无效行数量发生变动,可以先拉取完整文本,筛选列数和表头一致的有效行再解析:
import pandas as pd import requests from io import StringIO url = "https://ark-funds.com/wp-content/uploads/funds-etf-csv/ARK_INNOVATION_ETF_ARKK_HOLDINGS.csv" # 拉取原始CSV文本 resp = requests.get(url) resp.encoding = "utf-8" all_lines = resp.text.strip().split("\n") # 按表头的逗号数量筛选列数匹配的有效行 header_sep_count = all_lines[0].count(",") valid_lines = [line for line in all_lines if line.count(",") == header_sep_count] # 拼接有效行后解析为DataFrame test = pd.read_csv(StringIO("\n".join(valid_lines)))
如果仍存在少量格式异常的行,可以在pd.read_csv中追加参数on_bad_lines='skip'自动跳过异常行。
内容的提问来源于stack exchange,提问作者user2946746
相关产品推荐
相关产品推荐

