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