爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 175|回复: 0

[经验总结] python处理excel问题及处理方式

[复制链接]

新浪微博达人勋

发表于 2024-11-27 16:54:50 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 menseye 于 2024-11-28 11:51 编辑

在业务工作中,经常碰到的excel问题:
1、所需数据分布于多个sheet、多个excel文件,如何读取并整合到一个data?
2、站点经纬度文件与站点数据分开,如何找到站点数据对应的经纬度,并作图?
3、数据文件包括了一年365天,但想挑选一年中所有污染日的数据并作小时平均?



对于问题1:
(1)读取一个excel文件中多个sheet:

dat = pd.read_excel('D:\\***自己的文件夹**\\20210101-20211231.xls',header=0,  names=['站点','日期','o3'], sheet_name=None)
data = pd.concat(dat)       #整合所有sheet至一个data
(2)读取多个数据内容一致的excel
path=r'D:\***自己的文件夹**\2020'      #我将所有的Excel文件全部放入2020这个文件下
filelist=[]
for file in os.listdir(path):                      #遍历文件下所有Excel文件并读取至data中
    if file.endswith('.xlsx') or file.endswith('.xls'):    # 检查文件扩展名是否为xlsx或xls
        filename = os.path.join(path, file)
        filelist.append(filename)                 #将文件名存放至filelist中,方便检查是否有遗漏文件
        dat = pd.read_excel(filename,header=0,names=['站点','日期','o3'], sheet_name=None)
        data = pd.concat(dat)


对于问题2和问题3,多重for循环下一起处理:
思路是挑选数据
        data['date']=data['日期'].str.slice(0, 10)        #我拿到的数据文件中,日期和时间连在一起(2019-12-15 05   YYYY-MM-DD hh的格式),         
        data['hour']=data['日期'].str.slice(11, 13)       #所以要将日期和小时分开
        datesel = pd.read_excel('D:\\work-data\\han\\2021wu.xlsx',header=0,names=['date','datesel'])  #我将要选择的21个污染日期存在2021wu.xlsx文件中
        hoursel = pd.read_excel('D:\\work-data\\hoursel.xlsx',header=0,names=['hour'])                   #将0-23时刻以hh-mm的格式写在hoursel.xlsx文件中
        hoursel['hour'] = hoursel['hour'].astype(str)                    
        hoursel['hoursel']=hoursel['hour'].str.slice(0, 2)                     #取hh-mm中前两位hh,以和数据文件中data['hour']相一致
        datalat= pd.read_csv('D:\\work-data\\han\\latlonsel.csv',sep=',',header=0,names=['站点','lon','lat','o3'])    #站点经纬度文件
        df = pd.DataFrame(data=None,columns=['站点','日期','o3','date','hour'])         #建立空data,用于存放选中的污染日数据
        for i in range(0,21):                                                                            #从一年365天中,选择了21个污染日
            t=data[(data['date']==datesel['datesel'])]                                     #选择和每一个污染日期对应的数据文件中的数据,存放至df中
            df = df.append(t,ignore_index=True)                              

       for j in range(0,24):                                                                              #第一重for循环,找到每一个小时的数据;
            samehour=df[(df['hour']==hoursel['hoursel'][j])]

            for m in range(0,121):                                                                            #第二重for循环,将该小时的站点数据和经纬度文件的站点经纬度对应起来
                samehourlat=samehour[(samehour['站点']==datalat['站点'][m])]
                datalat['o3'][m]= samehourlat['o3'].mean(skipna=True)                                #作小时平均,并将小时平均数据存放至datalat['o3'][m]中,这样就将小时平均后的数据与经纬度放在了一个文件中


            o3=datalat['o3'].values
            lat=datalat['lat'].values
            lon=datalat['lon'].values




下回再更

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表