Python 熊猫从web URL读取\u csv
我正在尝试使用Python3从给定URL读取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
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'
作为参数,是否有效?谢谢您的帮助