Python 从url读取csv时如何在熊猫中合并和连接

Python 从url读取csv时如何在熊猫中合并和连接,python,pandas,Python,Pandas,我从url中读取csv,我想构建一个独特的数据框架。csv对应于唯一位置的一个参数的测量时间序列(例如,每个url与一个位置和一个唯一参数相关联) url这里是一个url列表,我从中获取csv 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_pm

我从url中读取csv,我想构建一个独特的数据框架。csv对应于唯一位置的一个参数的测量时间序列(例如,每个url与一个位置和一个唯一参数相关联)

url
这里是一个url列表,我从中获取csv

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
是一个数据帧,包含特定参数的所有位置时间序列,例如:

            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
我想得到这样的东西

            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
但我只能通过分别为每个参数重复上面的代码,然后执行类似的操作来实现这一点

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

有一种方法可以更有效地执行此操作(尤其是当有更多参数时)?

覆盖数据时会出现问题。因此,您可以在每个循环中使用两个列表进行追加,如果需要,还可以删除所有列,其中所有
NaN
s add用于设置索引名,这些索引名在
reset\u index
之后转换为列名:

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={}'


似乎对于每个参数,您都访问不同的URL,在这种情况下,我认为不会有比您建议的更简单/更有效的解决方案。
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