使用Pandas从URL读取Excel文件-XLRDError

8

我正在尝试从以下URL读取excel文件到Pandas中:

url1 = 'https://cib.societegenerale.com/fileadmin/indices_feeds/CTA_Historical.xls'

url2 = 'https://cib.societegenerale.com/fileadmin/indices_feeds/STTI_Historical.xls'

使用代码:
pd.read_excel(url1)

然而它不起作用,我收到了错误提示:
XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '2000/01/'

在谷歌上搜索后,似乎有时通过URL提供的.xls文件实际上是以不同的文件格式隐藏在幕后,如html或xml。
当我手动下载Excel文件并使用Excel打开它时,会出现错误消息:“文件格式和扩展名不匹配。该文件可能已损坏或不安全。除非您信任它的来源,否则请勿打开它。”
当我打开它时,它看起来就像一个普通的Excel文件。
我在网上看到一篇帖子建议我在文本编辑器中打开文件,以查看是否有任何其他信息作为正确的文件格式,但是当使用notepad++打开时,我没有看到任何其他信息。
请问有人能帮助我将这个“xls”文件正确地读入pandas DataFrame中吗?
2个回答

6

看起来您可以使用read_csv

import pandas as pd

df = pd.read_csv('https://cib.societegenerale.com/fileadmin/indices_feeds/CTA_Historical.xls',
                 sep='\t',
                 parse_dates=[0],
                 names=['a','b','c','d','e','f'])
print df

然后我检查最后一列f是否有其他值,如NaN

print df[df.f.notnull()]

Empty DataFrame
Columns: [a, b, c, d, e, f]
Index: []

所以只有NaN,因此您可以通过参数usecols过滤最后一列f

import pandas as pd

df = pd.read_csv('https://cib.societegenerale.com/fileadmin/indices_feeds/CTA_Historical.xls',
                 sep='\t',
                 parse_dates=[0],
                 names=['a','b','c','d','e','f'],
                 usecols=['a','b','c','d','e'])
print df

啊,太棒了,谢谢!它完美地工作了!- 你是知道 read_csv 会起作用还是有什么方法可以告诉你的? - s666
首先,当我打开带有文件的URL时,我的Excel会返回警告。然后我通过Notepad ++检查文件,它看起来像是csv格式。因此,我使用了read_csv而不是其他方法进行读取,效果非常好。祝你好运! - jezrael
谢谢提供的信息 - 我也用Notepad++打开了它,试图查看,但你在哪里看到它是CSV格式的附加信息?我只看到了其中包含的文本数据。 - s666
抱歉,这是txt格式的文件,没有csv格式。但是read_csv函数通常可以很好地读取一些结构良好的txt文件。感谢您的接受。 - jezrael

4

如果有帮助的话,您可以直接通过URL在Excel中读取Google Drive文件,无需登录。我在Google Colab上尝试过,它起作用了。

  • 将XL文件上传到Google Drive或使用已上传的文件
  • 向任何人共享文件链接(我不知道仅查看是否有效,但我尝试了完全访问权限)
  • 复制链接

您将得到类似于这样的内容。

共享网址:https://drive.google.com/file/d/---some--long--string/view?usp=sharing

从尝试下载文件获取下载 URL(从那里复制URL)

它会像这样:(它具有与上面相同的 Google 文件 ID)

下载网址:https://drive.google.com/u/0/uc?id=---some--long--string&export=download

现在转到Google Colab并粘贴以下代码:

import pandas as pd

fileurl   = r'https://drive.google.com/file/d/---some--long--string/view?usp=sharing'
filedlurl = r'https://drive.google.com/u/0/uc?id=---some--long--string&export=download'

df = pd.read_excel(filedlurl)
df

就这样...文件已经保存在您的数据框(df)中了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接