2017-03-09 6 views
1

Ich habe einige Fragen zu diesem Thema gelesen, aber nichts scheint für mich zu arbeiten.URL als Pandas Datenrahmen mit Spaltennamen lesen (python3)

Ich möchte die Daten von dieser Seite "http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/heart/heart.dat" mit bestimmten Namen für die Spalten abrufen.

Mein Code ist die folgende, die mich zu den Spalten der Daten zuweisen Namen nicht zulässt, weil alles in einer einzigen Spalte ist:

import pandas as pd 
import io 
import requests 
url="http://archive.ics.uci.edu/ml/machine-learningdatabases/statlog/heart/heart.dat" 
s=requests.get(url).content 
header_row = ['age','sex','chestpain','restBP','chol','sugar','ecg','maxhr','angina','dep','exercise','fluor','thal','diagnosis'] 
c=pd.read_csv(io.StringIO(s.decode('utf-8')), names=header_row) 
print(c) 

Die Ausgabe lautet:

 age sex chestpain \ 
0 70.0 1.0 4.0 130.0 322.0 0.0 2.0 109.0 0.0 2.4... NaN  NaN 
1 67.0 0.0 3.0 115.0 564.0 0.0 2.0 160.0 0.0 1.6... NaN  NaN 
2 57.0 1.0 2.0 124.0 261.0 0.0 0.0 141.0 0.0 0.3... NaN  NaN 
3 64.0 1.0 4.0 128.0 263.0 0.0 0.0 105.0 1.0 0.2... NaN  NaN 

Was muss ich tun, um mein Ziel zu erreichen?

Vielen Dank !!!

+0

sind Sie sicher von der URL. Ich bekomme einen Fehler 404 beim Öffnen –

+0

die richtige URL https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/heart/heart.dat –

Antwort

1

Der von Ihnen angegebene Link fehlte ein Bindestrich. Das habe ich in meiner Antwort korrigiert. Grundsätzlich müssen Sie die s Zeichenfolge in utf-8 decodieren, dann teilen Sie es auf \n, um jede Zeile zu erhalten, und teilen Sie dann jede Zeile auf Leerzeichen, um jeden Wert separat zu erhalten. Dadurch erhalten Sie eine verschachtelte Listendarstellung des Datensatzes, die Sie in einen Pandas-Datenrahmen konvertieren können, und danach können Sie die Spaltennamen zuweisen.

import pandas as pd 
import io 
import requests 
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/statlog/heart/heart.dat" 
s = requests.get(url).content 
s = s.decode('utf-8') 
s_rows = s.split('\n') 
s_rows_cols = [each.split() for each in s_rows] 
header_row = ['age','sex','chestpain','restBP','chol','sugar','ecg','maxhr','angina','dep','exercise','fluor','thal','diagnosis'] 
c = pd.DataFrame(s_rows_cols, columns = header_row) 
c.head() 
+0

Vielen Dank! Das war was ich brauchte! Freundliche Grüße!!! –

Verwandte Themen