从 URL 读取 CSV 文件时忽略分隔符 - Python

问题描述 投票:0回答:1

我有一些用于下载 CSV 文件的 URL。

import pandas as pd
import io
import requests

url1 = 'https://www.ons.gov.uk/generator?format=csv&uri=/economy/economicoutputandproductivity/output/timeseries/' + 'k22a' + '/diop'

url2 = 'https://www.ons.gov.uk/generator?format=csv&uri=/economy/economicoutputandproductivity/output/timeseries/' + 'k24c' + '/diop'

s=requests.get(url).content
c=pd.read_csv(io.StringIO(s.decode('utf-8')))

当我使用

url1
时,第4条记录中有一个
','
。但有些网址 (
url2
) 没有这种意外的分隔符。这导致了

ParserError:标记数据时出错。 C 错误:行中应有 1 个字段 5、锯2

当我尝试将 CSV 文件合并到单个数据帧中时。我如何忽略这些意外的分隔符。无论如何,前七条记录都要被删除。但我仍然收到此错误。

这个解决方案建议我们在转换为 CSV 之前预先解析每一行。由于我有很多这样的 URL,并且不确定将来会遇到哪些意外的分隔符,因此不知道如何调试。转换为 CSV 之前进行预解析可以吗?如何以这样的方式实现,以包含将来遇到的其他分隔符?

pandas python-requests read.csv
1个回答
0
投票

由于您不需要元数据,只需使用

skiprows
跳过它,作为一个很好的副作用,您将自动获得正确的数据类型:

url = url1
N = 7

s = requests.get(url1).content
c = pd.read_csv(io.StringIO(s.decode('utf-8')), header=0, skiprows=range(1, N+1))

输出:

  Title  IOP: C:MANUFACTURING: CVMSA
0  1948                         25.2
1  1949                         27.0
2  1950                         29.0
3  1951                         29.9
4  1952                         28.4
© www.soinside.com 2019 - 2024. All rights reserved.