Pandas read_csv von der URL
Ich bin mit Python 3.4 mit IPython und habe den folgenden code. Ich bin nicht in der Lage zum Lesen einer csv-Datei von der angegebenen URL:
import pandas as pd
import requests
url="https://github.com/cs109/2014_data/blob/master/countries.csv"
s=requests.get(url).content
c=pd.read_csv(s)
Habe ich die folgende Fehlermeldung
"Erwartet-Datei Pfad name oder Datei-ähnliches Objekt, got type"
Wie kann ich dieses Problem beheben?
Kommentar zu dem Problem
Müssten Sie so etwas wie
c=pd.read_csv(io.StringIO(en.decode("utf-8")))
, aber Sie sind immer html nicht hin, eine csv-Datei, so dass es nicht zur Arbeit zu gehen Ich bin mir ziemlich sicher, das URL, die Sie wollen, ist
"https://raw.github.com/cs109/2014_data/blob/master/countries.csv"
. InformationsquelleAutor der Frage venom | 2015-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genau wie der Fehler schon sagt ,
pandas.read_csv
braucht ein file-like-Objekt als erstes argument.Wenn Sie möchten, Lesen Sie die csv aus einer Zeichenfolge, die Sie verwenden können,
io.StringIO
(Python 3.x) oderStringIO.StringIO
(Python-2.x) .Auch für die URL - https://github.com/cs109/2014_data/blob/master/countries.csv - Sie sind immer wieder
html
Antwort , nicht roh-csv verwenden, sollten Sie die url von derRaw
link in der github-Seite für die erste raw-csv-Antwort , die - https://raw.githubusercontent.com/cs109/2014_data/master/countries.csvBeispiel -
Update
Von pandas
0.19.2
jetzt können Sie nur übergeben Sie die url direkt.InformationsquelleAutor der Antwort Anand S Kumar
In der neuesten version des pandas (
0.19.2
) können Sie direkt die Weitergabe der urlInformationsquelleAutor der Antwort inodb
Wie ich sagte, die Sie benötigen, um ein StringIO-Objekt und-Dekodierung ich.e
c=pd.read_csv(io.StringIO(s.decode("utf-8")))
wenn Sie mit Anfragen, die Sie brauchen, um zu entschlüsseln, wie .Inhalt zurück bytes, wenn Sie verwendet werden .text würden Sie gerade brauchen, um passieren s wies = requests.get(url).text
c =pd.read_csv(StringIO(s))
.Einfacher Ansatz ist, um das korrekte url des raw Daten direkt an
read_csv
Sie nicht haben, um einen Datei-wie-Objekt, übergeben Sie eine url, so brauchen Sie nicht Anfragen an alle:Ausgabe:
Aus der docs:
filepath_or_buffer :
InformationsquelleAutor der Antwort Padraic Cunningham
Des Problems, das Sie haben ist, dass die Ausgabe in die variable 's' ist nicht um eine csv -, sondern eine html-Datei.
Um die raw-csv, müssen Sie ändern Sie die url zu:
'https://raw.githubusercontent.com/cs109/2014_data/master/countries.csv'
Ihre zweite problem ist, dass read_csv erwartet einen Dateinamen, wir können dies lösen, indem Sie mit StringIO von io-Modul.
Drittes problem ist, dass Anfrage.get(url).die Inhalte liefert ein byte-stream, wir lösen können, dies mit der Anfrage.get(url).text statt.
Ergebnis ist dieser code:
Ausgabe:
InformationsquelleAutor der Antwort PabTorre