С помощью Pandas для чтения в файл Excel с URL - XLRDError

Я пытаюсь читать в Excel файлы для Pandas по следующим URL:

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/'

После поиска в Google кажется, что иногда файлы.xls, предлагаемые через URL-адреса, на самом деле хранятся в другом формате за кулисами, например html или xml.

Когда я вручную загружаю файл Excel и открываю его с помощью Excel, я получаю сообщение об ошибке: Формат и расширение файла не совпадают. Файл может быть поврежден или небезопасен. Если вы не доверяете его источнику, не открывайте его "

Когда я открываю его, он выглядит как обычный файл Excel.

Я наткнулся на сообщение в Интернете, в котором предлагалось открыть файл в текстовом редакторе, чтобы увидеть, есть ли какая-либо дополнительная информация о правильном формате файла, но я не вижу никакой дополнительной информации при открытии с помощью notepad++.

Может кто-нибудь, пожалуйста, помогите мне правильно прочитать этот файл "xls" в DataFramj панды?

1 ответ

Решение

Кажется, вы можете использовать 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, так что вы можете отфильтровать последний столбец f по параметру usecols:

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

Если это кому-то поможет... вы можете читать файл Google Диска прямо по URL-адресу в Excel без каких-либо требований входа в систему. Я пробовал в Google Colab, получилось.

  • Загрузите файл XL на Google Диск или используйте уже загруженный
  • Поделитесь файлом с кем угодно, у кого есть ссылка (я не знаю, работает ли только просмотр, но я пробовал с полным доступом)
  • Скопируйте ссылку

У вас получится что-то вроде этого.

поделиться URL: https://drive.google.com/file/d/---some--long--string/view?usp=sharing

Получите URL-адрес загрузки при попытке загрузить файл (скопируйте URL-адрес оттуда)

Это будет примерно так: (у него тот же идентификатор файла google, что и выше)

скачать URL: 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.

Другие вопросы по тегам