Python 熊猫从web URL读取\u csv

Python 熊猫从web URL读取\u csv,python,pandas,Python,Pandas,我正在尝试使用Python3从给定URL读取csv文件 import pandas as pd url = 'https://www.hkex.com.hk/eng/dwrc/search/dwFullList.csv' # error url_2 = 'https://www.cboe.com/us/options/symboldir/equity_index_options/?download=csv df = pd.read_csv(url) # error df = pd.read_cs

我正在尝试使用Python3从给定URL读取csv文件

import pandas as pd
url = 'https://www.hkex.com.hk/eng/dwrc/search/dwFullList.csv' # error
url_2 = 'https://www.cboe.com/us/options/symboldir/equity_index_options/?download=csv
df = pd.read_csv(url) # error
df = pd.read_csv(url_2) # can download csv from url
当我运行
df=pd.read\u csv(url)
时,系统返回:

File "pandas\_libs\parsers.pyx", line 537, in pandas._libs.parsers.TextReader.__cinit__
File "pandas\_libs\parsers.pyx", line 740, in pandas._libs.parsers.TextReader._get_header
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
但是,当我运行
df=pd.read\u csv(url\u 2)
时,系统可以返回数据帧。
我怎样才能解决这个问题?我使用的是Python 3.7。

这是由意外的头导致的。如果查看文件,第一行是一些“更新”行,它不是CSV的一部分。因此,您应该将
skiprows
传递给
read\u csv

df = pd.read_csv(url, skiprows=[1])
另见


我最初的回答假设没有标题,但结果是标题向下移动了一行。

首先,让我们了解一下
错误。您面临的
错误如下所述:-

UnicodeDecodeError:'utf-8'编解码器无法解码位置0中的字节0xff:无效的开始字节

  • 您已经注意到,我们的
    错误类型是
    UnicodeDecodeError
    0xff
    编解码器
为什么发生此
错误以及如何
解决它?

在我们的例子中,
pd.read\u csv()
模块使用
编码='utf-8'
进行
编码
数据。使用
0xff
编解码器时,您将面临
错误。因此,
0xff
是以
十六进制数字系统(基数16)
表示的数字。它由
hex
中的两个
f
数字组成。我们知道,
hex
中的
f
相当于
二进制数字系统中的
1111

  • 解决方案:-在获取
    数据时使用
    编码='utf-16'

在这种情况下,您可能会遇到标记化数据的
错误。C错误:第3行中预期有1个字段,由于
页眉和
页脚的
分隔错误而出现3个
错误
。因此,您的查询解决方案如下:-

# Import all the important Libraries
import pandas as pd 

# Fetch 'CSV' Data Using 'URL' and store it in 'df'
url = 'https://www.hkex.com.hk/eng/dwrc/search/dwFullList.csv'
df = pd.read_csv(url, encoding = 'utf-16', sep = '\t', error_bad_lines = False, skiprows = 1, skipfooter = 3, engine = 'python')

# Print a few records of df
df.head()
上述单元格的输出:-

要了解有关pd的详细信息,请阅读_csv()
:-
要了解有关编码列表的详细信息
:-


如您所见,我们已经实现了所需的
输出。希望此解决方案对您有所帮助。

我已经尝试了skiprows=[1]或header=Non。这两个文件都无法工作并显示[pandas.errors.ParserError:Error Tokenized data.C Error:Expected 1 fields in line 5,saw 3]尽管标记为csv,但看起来它实际上可能是一个.tsv文件(制表符分隔的值)。如果您使用
sep='\t'
作为参数,是否有效?谢谢您的帮助