之前用arcmap的模型工具将nc文件转tif后,提取降雨数据到excel中,距离最终需要的数据还是有一定的差距。需要用到Python进行处理。
1、降雨需要的格式
做高标准农田,水资源平衡分析,用到的历年降雨资料表格。是一个地区的水文站约近40年的数据。如下图:
arcmap处理获得的数据,是每个月不同地区降雨量的情况,一年有十二个月,年份从1901-2023年总共123年。数据结构如下:
2、代码思路
原始数据:目前数据是有1901-2023年共123个文件夹,每个文件夹里有1-12月共12个Excel表,每张表里有101个市县的月降雨数据。
目标数据:生成101个表格,每个表格能将该市县1901-2023年每个年份12个月的数据体现出来。
如上图:分三步即可完成任务。第一步循环读取123个文件中的12个表格,用到pandas。第二步:前一步获取的是列表,列表镶套列表,总共4层,将其转化为四维数组,转化后,再转换轴,用到numpy模块。第三步:将上一步的四维数组再转回列表,再循环写入到excel当中。
3、具体代码
步骤一:循环读取表
'''
将excel表格整理成,每个区县的降雨量1901-2023;
'''
import pandas as pd
import numpy as np
# 外面1901到2023的数组
ex_z=[] # 读取的最终列表
for j in range(1901,2024):
# 先读取一个文件里的Excel
wjj='G:\\rain\\hunan\\pre_'+str(j) # 你的文件夹路径
ex=[]
for i in range(1,13):
# 文件路径
file_path =wjj+"\\"+str(i)+".xls"
# 使用pandas读取xls文件
df = pd.read_excel(file_path)
ex1=[]
#读取每行成列表
for index,row in enumerate (df.values.tolist()):
# print(index)
ex1.append([row[1],round(float(row[5])/10,2)]) #之前获取的是0.1mm降雨,转化为1mm
ex.append(ex1)
ex_z.append(ex)
步骤二:四维数组转换轴
# 将列表转数组
a=np.array(ex_z)
# 转换轴
b=np.transpose(a,(2,0,1,3))
步骤三:将四维数组写入excel。
# 将四维数组按市县写入Excel
c=b.tolist()
for i in range(len(c)):
liem=['年份','一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
x=c[i]
# 获取市县名称
nameqx=x[0][0][0]
data=[]
for j in range(1901, 2024):
k=j-1901
data.append([str(j),x[k][0][1],x[k][1][1],x[k][2][1],x[k][3][1],x[k][4][1],x[k][5][1],x[k][6][1],x[k][7][1]
,x[k][8][1],x[k][9][1],x[k][10][1],x[k][11][1]])
df=pd.DataFrame(data,columns=liem)
df.to_excel(nameqx+'.xlsx', index=False)
4、成果
最终形成了101张表格,表格的效果如下:
标签:表格,nc,excel,降雨,列表,ex,逐年逐月,1901 From: https://blog.csdn.net/weixin_47364423/article/details/143607825