2017-05-04 1 views
1

in Pandas zu verbinden und zu verketten Ich lese csv's von der URL und ich möchte einen eindeutigen Datenrahmen erstellen. Die CSVs entsprechen einer Zeitreihe von Messungen für einen Parameter für eine eindeutige Position (z. B. ist jede URL einer Position und einem eindeutigen Parameter zugeordnet).Wie in Pandas beim Lesen von CSV von URL

parameter = ['pm10','pm2.5','o3','no2'] 
location = [ 'Nabel_LUG', 'Nabel_MAG'] 

urls = [] 
dfs = [] 
CSV_URL = 'http://www.oasi.ti.ch/web/rest/measure/csv?domain=air&resolution=y&parameter={}&from=2007-01-01&to=2017-04-28&location={}' 
for l in location: 
    for p in parameter: 
     url = CSV_URL.format(p, l) 
     urls.append(url) 

urls hier ist eine Liste der URL, von der ich die csv des bekommen.

dfs = [(pd.read_csv(url, comment='#', sep=';', usecols=[0, 1], index_col='data')) for url in urls] 
result_pm10 = pd.concat(dfs, keys=location) 

result_pm10 ist ein Datenrahmen, der alle Standort der Zeitreihe für einen bestimmten Parameter zB enthält: so etwas wie dieses nur

  data    PM10 O3  NO2 

Nabel_LUG 01.07.2011 01:00 21.0 683.0 34.0 
Nabel_LUG 01.07.2012 01:00 21.0 668.0 32.0 
Nabel_LUG 01.07.2013 01:00 18.0 707.0 31.0 
Nabel_LUG 01.07.2014 01:00 15.0 366.0 29.0 
Nabel_LUG 01.07.2015 01:00 18.0 804.0 30.0 
Nabel_LUG 01.07.2016 01:00 16.0 550.0 28.0 
Nabel_LUG 01.07.2017 01:00 24.0 45.0 37.0 
Nabel_MAG 01.07.2011 01:00 24.0 540.0 20.0 
Nabel_MAG 01.07.2012 01:00 21.0 432.0 19.0 
Nabel_MAG 01.07.2013 01:00 19.0 494.0 18.0 
Nabel_MAG 01.07.2014 01:00 15.0 259.0 20.0 
Nabel_MAG 01.07.2015 01:00 19.0 596.0 18.0 
Nabel_MAG 01.07.2016 01:00 15.0 363.0 21.0 
Nabel_MAG 01.07.2017 01:00 22.0 65.0 24.0 

  data    PM10 

Nabel_LUG 01.07.2011 01:00 21.0 
Nabel_LUG 01.07.2012 01:00 21.0 
Nabel_LUG 01.07.2013 01:00 18.0 
Nabel_LUG 01.07.2014 01:00 15.0 
Nabel_LUG 01.07.2015 01:00 18.0 
Nabel_LUG 01.07.2016 01:00 16.0 
Nabel_LUG 01.07.2017 01:00 24.0 
Nabel_MAG 01.07.2011 01:00 24.0 
Nabel_MAG 01.07.2012 01:00 21.0 
Nabel_MAG 01.07.2013 01:00 19.0 
Nabel_MAG 01.07.2014 01:00 15.0 
Nabel_MAG 01.07.2015 01:00 19.0 
Nabel_MAG 01.07.2016 01:00 15.0 
Nabel_MAG 01.07.2017 01:00 22.0 

Ich möchte bekommen, aber ich bin dazu in der Lage, dies zu tun, indem Sie den obigen Code für jeden Parameter separat wiederholen und dann etwas wie

tun
df_parameter = [result_pm10, result_pm25, result_o3, result_no2] 
result = pd.concat(df_parameter, axis=1) 

Es gibt eine Möglichkeit, dies auf effizientere Weise zu tun (vor allem, wenn es viel mehr Parameter gibt)?

+1

Es scheint wie für jeden Parameter eine andere URL zugreifen, wobei in diesem Fall glaube ich nicht, dass es eine einfachere/effizientere Lösung als die sein, die Sie vorgeschlagen. – Robbie

Antwort

0

Es gibt ein Problem beim Überschreiben von Daten. So können Sie zwei Listen in jeder Schleife verwenden zum Anhängen, auch wenn alle Spalten entfernen müssen, wo alle NaN s dropna hinzufügen, ist rename_axis für Satz Indexnamen, die nach reset_index zu Spaltennamen umgewandelt werden:

parameter = ['pm10','pm2.5','o3','no2'] 
location = [ 'Nabel_LUG', 'Nabel_MAG'] 

dfs = [] 
CSV_URL = 'http://www.oasi.ti.ch/web/rest/measure/csv?domain=air&resolution=y&parameter={}&from=2007-01-01&to=2017-04-28&location={}' 
for l in location: 
    dfs1 = [] 
    for p in parameter: 
     url = CSV_URL.format(p, l) 
     df = pd.read_csv(url, comment='#', sep=';', usecols=[0, 1], index_col='data') 
     dfs1.append(df) 
    dfs.append(pd.concat(dfs1, axis=1)) 

result_pm10 = pd.concat(dfs, keys=location) 
       .rename_axis(('location','data')) 
       .dropna(axis=1, how='all') 
       .reset_index() 
print (result_pm10) 

 location    data PM10  O3 NO2 
0 Nabel_LUG 01.07.2007 01:00 27.0 804.0 35.0 
1 Nabel_LUG 01.07.2008 01:00 25.0 540.0 34.0 
2 Nabel_LUG 01.07.2009 01:00 22.0 651.0 32.0 
3 Nabel_LUG 01.07.2010 01:00 21.0 652.0 33.0 
4 Nabel_LUG 01.07.2011 01:00 21.0 683.0 34.0 
5 Nabel_LUG 01.07.2012 01:00 21.0 668.0 32.0 
6 Nabel_LUG 01.07.2013 01:00 18.0 707.0 31.0 
7 Nabel_LUG 01.07.2014 01:00 15.0 366.0 29.0 
8 Nabel_LUG 01.07.2015 01:00 18.0 804.0 30.0 
9 Nabel_LUG 01.07.2016 01:00 16.0 550.0 28.0 
10 Nabel_LUG 01.07.2017 01:00 24.0 45.0 37.0 
11 Nabel_MAG 01.07.2007 01:00 26.0 607.0 22.0 
12 Nabel_MAG 01.07.2008 01:00 23.0 416.0 22.0 
13 Nabel_MAG 01.07.2009 01:00 21.0 433.0 21.0 
14 Nabel_MAG 01.07.2010 01:00 19.0 527.0 21.0 
15 Nabel_MAG 01.07.2011 01:00 24.0 540.0 21.0 
16 Nabel_MAG 01.07.2012 01:00 21.0 432.0 20.0 
17 Nabel_MAG 01.07.2013 01:00 19.0 494.0 19.0 
18 Nabel_MAG 01.07.2014 01:00 15.0 259.0 18.0 
19 Nabel_MAG 01.07.2015 01:00 19.0 596.0 20.0 
20 Nabel_MAG 01.07.2016 01:00 15.0 363.0 18.0 
21 Nabel_MAG 01.07.2017 01:00 22.0 65.0 24.0 
+0

vielen dank für ihre hilfe. Es wirkt wie ein Zauber! – lorenzo

Verwandte Themen