import pandas as pd
import numpy as np
import netCDF4 as nc
# 读取txt文件
file = r'D:\Desktop\root\runoff\runoff.txt'
with open(file, 'r') as f:
data = pd.read_table(file, sep="\s+", header=None, names=["x", "y", "dat"], low_memory=False) # 读取txt并分隔
data = pd.DataFrame(data)
duplicate = data.duplicated(subset=['x', 'y'], keep=False) # 按"x","y"提取重复索引
duplicate_data = data.loc[duplicate, :]
duplicate_data['dat'] = duplicate_data['dat'].astype(float) # 将数据转化为浮点数,索引转换为整数类型
duplicate_data['x'] = duplicate_data['x'].astype(int)
duplicate_data['y'] = duplicate_data['y'].astype(int)
duplicate_data_sum = duplicate_data.groupby(by=['x', 'y'], as_index=False).agg({'dat': sum}) # 按相同索引将重复值求和
# print(duplicate_data_sum)
# duplicate_data_sum.to_csv('D:/Desktop/out_runoff.txt', index=False, sep=' ', encoding='utf_8_sig')
# 将DataFrame文件写入二维数组
nc_list = np.full((159, 159), np.nan) # 创建全nan数组
for i in range(len(duplicate_data_sum)):
# print(duplicate_data_sum['x'][i], '\t', duplicate_data_sum['y'][i])
nc_list[duplicate_data_sum['x'][i]-1][duplicate_data_sum['y'][i]-1] = duplicate_data_sum['dat'][i]
print(np.nanmean(nc_list))
# 创建nc文件并写入runoff二维数据
file_nc = "D:/Desktop/runoff160.nc"
nc_pro = nc.Dataset(file_nc, 'w', format='NETCDF4')
# 创建两个地理坐标维度(格点)
e_we = nc_pro.createDimension("e_we", 159)
e_sn = nc_pro.createDimension("e_sn", 159)
# 按维度创建变量
runoff = nc_pro.createVariable("runoff", np.float64, ("e_we", "e_sn"))
# 将二维数组值写入runoff变量
nc_pro.variables['runoff'][:] = nc_list
print(nc_pro)
# 关闭nc文件(否则所创建的nc无法删除)
nc_pro.close()
提取txt中二维索引变量,并写入nc文件
最新推荐文章于 2024-06-07 13:01:43 发布