一开始我是比较青睐于用numpy的数组来进行数据处理的,因为比较快。快。。快。。。但接触多了pandas之后还是觉得各有千秋吧,特别是之前要用numpy的循环操作,现在不用了。。。果然我还是孤陋寡闻,所以如果不是初学者,就跳过吧:
'''
首先上场的是利用pandas对许多csv文件进行y轴方向的合并(这里的csv文件有要求的,最起码格式要一致,比如许多系统里导出的文件,格式都一样,但就是文件数量太多了),当然首先需要读取一个csv文件,然后将剩下的贴上去。好像之前有转过一个excel版的合并,也是可以的。
'''
import pandas as pd
import os
csvpath='D:/minxinan/wrw/2018csv'
csvfile=os.listdir(csvpath)
#for i in xlsxfile:
# data_xls = pd.read_excel(xlsxpath+'/'+i)
# data_xls.to_csv('1.csv', encoding='gbk')
#
b=pd.read_csv(csvpath+'/'+csvfile[0], delimiter=',',encoding='gbk')
for i in csvfile[1:]:
a=pd.read_csv(csvpath+'/'+i, delimiter=',',encoding='gbk')
b=pd.concat([b,a],ignore_index=True)
###紧接着是时间序列的初步接触
b1=b[['时间']]
b1=b1.rename(columns={'时间':'datetime'})
b1['datetime'] = pd.to_datetime(b1['datetime'],format='%Y-%m-%d %H:%M:%S')#格式转为时间戳
year=[i.year for i in b1['datetime']]#以下几个年月日,我暂时还没细细研究,怎么提取一年中的某一天。。。好像相减可以解决,遇到问题再解决吧
b['year']=year
b2=b.drop(b[b.year!=2018].index)
b2=b2.drop(b2[b2.纬度>27.1604].index)##这个删除强烈推荐,我之前入门的时候完全靠循环,还是list循环。。。莫名的可悲
b2=b2.drop(b2[b2.经度>119.017].index)
b2=b2.drop(b2[b2.点位=='县自来水厂'].index)
b3=b2[['经度','纬度','AQI']]###选取多列
b4=np.array(b3)
b.to_csv('D:/minxinan/AQI/csv/2018.csv',encoding='gbk')
b5=b2[['时间']]
b5=b5.rename(columns={'时间':'datetime'})
b5['datetime'] = pd.to_datetime(b5['datetime'],format='%Y-%m-%d %H:%M:%S')#格式转为时间戳
day=[i.day for i in b5['datetime']]
month=[i.month for i in b5['datetime']]
doy=[]
for ij in range(len(day)):
a=month[ij]*32+day[ij]
doy.append(a)
b2['doy']=doy
group=b2.groupby([b2['经度'],b2['纬度'],b2['doy']],as_index=False)
b5=group.mean()###这里就是groupby的统计功能了,除了平均值还有一堆函数。。。
b6=b5.sort_values('doy',ascending=True)##排序也是可以的
b6.reset_index(drop=True, inplace=True)
b3=b6[['经度','纬度','AQI']]###选取多列
b4=np.array(b3)
b6.to_csv('D:/minxinan/AQI/csv/b6.csv',encoding='gbk')