- 积分
- 1098
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-4-25
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 veroniaca 于 2021-12-25 11:25 编辑
污染物数据网站链接:https://quotsoft.net/air/
因为这是站点的小时资料,并且每天的数据都是一个csv文件,想要获得几年的空气质量数据(如PM2.5,PM10,O3等)处理起来就会非常麻烦,所以编写了以下代码,供大家使用(不过代码运行起来速度很慢,因为是python小白,用的都是最简单的语句去写)
数据处理的逻辑就是:
1.先创建一个二维数据(时间 * 站点)
2.再根据时间将站点数据读入(之所以这样,是因为每个CSV文件的站点数不一样,所以对应的行也不一致,所以选用了只有通过if语句,将站点对应之后,再把数据写入)
- import pandas as pd
- import os
- import numpy as np
- import datetime
- inputfile = "G:/python/PM25_PM10/Particle/test/" #输入文件路径,就是你要读取的批量日文件
- outputfile = "G:/python/PM25_PM10/Particle/test/test1/test_output.csv" #输出文件的路径
- file_path = inputfile
- output_path = outputfile
- #build station list #这个站点列表是网站上写出的,但是我把2016-2020的站点都放了进去
- station_file = "G:/python/PM25_PM10/Particle/2020station.xlsx"
- station_name = pd.read_excel(io = station_file) #读取站点文件
- station = station_name["Station"]
- num_station = station_name.shape[0] #获取行数,
- station = station.tolist()
- #print(station[0])
- i=0
- for filename in os.listdir(file_path):
- dirs = file_path + filename
- #read data
- pms = pd.read_csv(dirs)
- pms_25 = pms[pms.type == "PM2.5"] #这个是提取某个元素的资料,我提取的是PM2.5和PM10的,因为要计算PM2.5/PM10的比值
- pms_10 = pms[pms.type == "PM10"]
- column = pms_25.shape[1] #获取列数
- row = pms_25.shape[0] #获取行数
- #print(pms.columns[3]) 等同于#print(pms[pms_25.columns[3]]) 等同于#print(pms_25.iloc[:,3]) #这句可忽略!!!
- #build empty data #开始创建一个二维数据
- data_build = np.zeros((row,num_station))
- data_build = pd.DataFrame(data_build)
-
复制代码 接上面:- #about time #这下面一大段都是时间格式的转换,因为想要写进文件的格式是yyyy-mm-dd hh:mm,方便之后时间的筛选
- yymmdd = np.array(pms_25["date"])
- yymmdd = yymmdd.tolist()
- yymmdd = [str(x) for x in yymmdd]
-
- year =np.empty(row)
- month =np.empty(row)
- day =np.empty(row)
-
- for i in range (0,row):
- year[i] = yymmdd[i][0:4]
- month[i] = yymmdd[i][4:6]
- day[i] = yymmdd[i][6:8]
-
- year = [int(x) for x in year]
- month = [int(x) for x in month]
- day = [int(x) for x in day]
-
- hour = np.array(pms_25["hour"])
-
- date = {}
-
- for i in range (0,row):
- date[i] = datetime.datetime(year[i], month[i], day[i], hour[i])
- date =list(date.values())
-
- #data columns and index
- data_build.columns = station
- data_build.index = date
-
- #input data
- for i in range (3,column):
- num = 0
- for j in range (i,num_station):
- if pms_25.columns[i] == station[j-3]:
- for k in range (0,row):
- data_build.iloc[k,j-3] = pms_25.iloc[k,i]/pms_10.iloc[k,i]
- #print(data_build.iloc[i,j-3])
- break
-
- data_build.to_csv(output_path,mode ="a")
复制代码 以上代码基本修改最前面的路径名,就可以使用了。
|
评分
-
查看全部评分
|