- 积分
- 365
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2019-11-6
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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
下回再更
|
|