2017-04-15 2 views
2

Ich möchte eine .csv Datei aus dem Internet laden und in eine pandas.DataFrame konvertieren.Laden von Web-Datendatei auf Pandas Datenrahmen

Hier ist meine Zielseite, wo ich eine .csv Datei finden möchte:

https://vincentarelbundock.github.io/Rdatasets/datasets.html

Wie kann ich eine .csv Datei von entsprechenden Elementen von der Webseite laden und umwandeln in ein panda.DataFrame?

Außerdem wäre es toll, wenn ich die Adressen der .csv Dateien auch von der Webseite bekommen könnte.

Dies würde erlauben Sie mir eine Funktion erstellen einen Elementnamen aus der Zielseite zu konvertieren, dass zurückkehren würde die .csv Dateiadresse wie:

def data(item): 
    file = 'https://vincentarelbundock.github.io/Rdatasets/csv/datasets/'+str(item)+'.csv' 

jedoch die Adressen der CSV-Dateien auf der Webseite sind nicht das gleiche Muster.

Zum Beispiel

https://vincentarelbundock.github.io/Rdatasets/csv/Stat2Data/Cuckoo.csv 
https://vincentarelbundock.github.io/Rdatasets/csv/datasets/cars.csv 

Ganz viele Dateien sind in anderem Verzeichnis, also muß ich ‚Artikel‘ suchen und die Adresse der entsprechenden CSV-Datei zu erhalten.

+0

Es scheint, dass es heute ein schlechter Tag für mich ist. Wieder tappe ich meine Zeit beim Lesen einer Frage, die in meinen Augen keine Frage ist, wenn man die Regeln für Fragen berücksichtigt ... Die Frage beschreibt das Problem, aber es fehlt der Teil: Was hast du getan, um das Problem zu lösen, das du beschreibst? – Claudio

+1

@Claudio, können Sie mir zeigen, wo es diktiert, dass Sie zeigen müssen, was Sie versucht haben? –

+0

Sie möchten alle Datensätze von dieser Seite lesen? – Hackaholic

Antwort

4

Pandas können die csv direkt aus dem HTTP-Link lesen:

Beispiel;

df = pd.read_csv(
    'https://vincentarelbundock.github.io/Rdatasets/' 
    'csv/datasets/OrchardSprays.csv') 
print(df) 

Ergebnisse:

Unnamed: 0 decrease rowpos colpos treatment 
0   1  57  1  1   D 
1   2  95  2  1   E 
..   ...  ...  ...  ...  ... 
62   63   3  7  8   A 
63   64  19  8  8   C 

[64 rows x 5 columns] 

Links über Schaben Anfahrt:

um die Links, sich von der ersten Seite zu bekommen, können wir auch pandas verwenden Web zum Schaben zu tun Daten. Etwas wie:

base_url = 'https://vincentarelbundock.github.io/Rdatasets/' 
url = base_url + 'datasets.html' 

import pandas as pd 
df = pd.read_html(url, attrs={'class': 'dataframe'}, 
        header=0, flavor='html5lib')[0] 

Gibt die Daten in der Tabelle auf der Seite zurück. Leider funktioniert dies nicht, da pandas den Text auf der Seite erfasst, nicht die Links.

Affe Patchen des Schabers Links zu bekommen:

die URLs zu erhalten, können wir die Bibliothek wie Affen-Patch:

def _text_getter(self, obj): 
    text = obj.text 
    if text.strip() in ('CSV', 'DOC'): 
     try: 
      text = base_url + obj.find('a')['href'] 
     except (TypeError, KeyError): 
      pass 
    return text 

from pandas.io.html import _BeautifulSoupHtml5LibFrameParser as bsp 
bsp._text_getter = _text_getter 

Testcode:

base_url = 'https://vincentarelbundock.github.io/Rdatasets/' 
url = base_url + 'datasets.html' 

import pandas as pd 
df = pd.read_html(url, attrs={'class': 'dataframe'}, 
        header=0, flavor='html5lib')[0] 

for row in df.head().iterrows(): 
    print('%-14s: %s' % (row[1].Item, row[1].csv)) 

Ergebnisse:

AirPassengers: https://vincentarelbundock.github.io/Rdatasets/csv/datasets/AirPassengers.csv 
BJsales  : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/BJsales.csv 
BOD   : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/BOD.csv 
CO2   : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/CO2.csv 
Formaldehyde : https://vincentarelbundock.github.io/Rdatasets/csv/datasets/Formaldehyde.csv 
+0

Du rockst! :-) (filler) – piRSquared

+0

Ja, du lässt mir einfach die einfachen, damit ich etwas Selbstvertrauen aufbauen kann. –

+0

Ich brauche dich, dass du dich gut fühlst! – piRSquared