2017-08-16 3 views
0

Ich versuche, Daten von einem Api ziehen, die mir Ozean Bedingungen in einem bestimmten Bereich geben sollte. Ich habe einige Probleme, die Daten zu ziehen und in separate Variablen zu trennen. Idealerweise möchte ich, dass diese Daten als Datenframe eingehen, aber es macht mir nichts aus, dass sie auf andere Weise kommen. Ich habe keine Erfahrung damit, also nicht sicher, ob ich das richtig mache. Mein Code:Python Api ziehen Daten als Datenframe

dataLink = 
'http://magicseaweed.com/api/MYApiKEY/forecast/?spot_id=1407&units=eu' 
data = urllib.request.urlopen(dataLink) 
data = data.readline().decode("utf-8") 
data = json.loads(data) 
data = pd.DataFrame(data) 
swell = data[(data['charts']=='swell')] 

Beispiel für URL zeigt forcast:

[{"timestamp":1502755200,"localTimestamp":1502755200,"issueTimestamp":1502755200,"fadedRating":1,"solidRating":0,"swell":{"absMinBreakingHeight":0.61,"absMaxBreakingHeight":0.95,"unit":"m","minBreakingHeight":0.6,"maxBreakingHeight":0.9,"components":{"combined":{"height":1.2,"period":7,"direction":77.13,"compassDirection":"WSW"},"primary":{"height":1.2,"period":7,"direction":70.75,"compassDirection":"WSW"},"secondary":{"height":0.1,"period":11,"direction":92.74,"compassDirection":"W"}}},"wind":{"speed":18,"direction":90,"compassDirection":"W","chill":13,"gusts":25,"unit":"kph"},"condition":{"pressure":1013,"temperature":15,"weather":12,"unitPressure":"mb","unit":"c"},"charts":{"swell":"https:\/\/hist-1.msw.ms\/wave\/750\/1-1502755200-1.gif","period":"https:\/\/hist-1.msw.ms\/wave\/750\/1-1502755200-2.gif","wind":"https:\/\/hist-1.msw.ms\/gfs\/750\/1-1502755200-4.gif","pressure":"https:\/\/hist-1.msw.ms\/gfs\/750\/1-1502755200-3.gif","sst":"https:\/\/hist-1.msw.ms\/sst\/750\/1-1502755200-10.gif"}}, 
+0

Ihre Daten sind in einem Format nicht, wo das Laden in einen Datenrahmen wäre vorteilhaft mit mir zu arbeiten. –

+0

Haben Sie Vorschläge, wie ich mit den Daten arbeiten soll? Ich bin mir nicht ganz sicher, was ich in dieser Hinsicht mache, danke –

+0

Hmm .... Folgen all Ihre Daten diesem Format? Dann könnte es sich lohnen. Hängt davon ab, was du ehrlich tun willst. –

Antwort

2

Es scheint, Sie json_normalize brauchen:

from pandas.io.json import json_normalize 

data = json.loads(data) 
df = json_normalize(data) 
print (df) 

          charts.wind condition.pressure \ 
0 https:\/\/hist-1.msw.ms\/gfs\/750\/1-150275520...    1013 

    condition.temperature condition.unit condition.unitPressure \ 
0      15    c      mb 

    condition.weather ...  swell.maxBreakingHeight \ 
0     12 ...       0.9 

    swell.minBreakingHeight swell.unit timestamp wind.chill \ 
0      0.6   m 1502755200   13 

    wind.compassDirection wind.direction wind.gusts wind.speed wind.unit 
0      W    90   25   18  kph 

[1 rows x 38 columns] 
Verwandte Themen