将含x、y列与变量A的DataFrame转换为无重复维度的NetCDF文件
问题:将二维表格数据转换为无重复维度的NetCDF文件
我的数据结构简化后如下:
- x = [1,1,2,2,3,3,4,4,...n,n]
- y = [1,2,1,2,1,2,1,2,...1,2]
- A = [7,5,6,5,4,6,2,5,...4,3]
这是二维数据,变量A的每个值对应同一行的x、y坐标,数据读取顺序为:从x=1、y=1开始,遍历完y的所有值后,再取x=2,遍历y从1到最大值,以此类推。我将这些数据存储为包含x、y、A三列的DataFrame,但直接使用Data.to_netcdf("filename.nc")转换为NetCDF时,会生成大量重复的x、y变量——维度被设为从1到n的索引。例如x实际只有5个唯一值,但转换后的NetCDF里会有15个x值(每个x重复y次),y坐标同理。
我需要生成的NetCDF中,A作为变量,x、y作为无重复的维度。真实数据集包含上百个x值和近百个y值,每个x会重复y次,每个y也对应所有x值。
原始数据处理代码
import pandas as pd S_2017 = pd.read_csv("S_2017.csv") EachValue = [] for i in range(124): Lon_min = 19.3 + i*0.1 Lon_max = Lon_min + 0.1 for j in range(45): S_2017_Analyze = S_2017 Lat_max = 64.2 - j*0.1 Lat_min = Lat_max - 0.1 S_2017_Analyze = S_2017_Analyze[S_2017_Analyze.iloc[:,1] >= Lon_min] S_2017_Analyze = S_2017_Analyze[S_2017_Analyze.iloc[:,1] <= Lon_max] S_2017_Analyze = S_2017_Analyze[S_2017_Analyze.iloc[:,2] >= Lat_min] S_2017_Analyze = S_2017_Analyze[S_2017_Analyze.iloc[:,2] <= Lat_max] S_Sum_2017 = S_2017_Analyze.iloc[:,3].sum() Pixel_S_2017 = [round(Lat_min,2),round(Lon_min,2),S_Sum_2017] EachValue.append(Pixel_S_2017) DataFrame = pd.DataFrame(EachValue,columns=["Latitude","Longitude","S_Sum_2017"])
解决方案代码
使用xarray库可以直接将带坐标列的DataFrame转换为具有无重复维度的NetCDF文件:
import xarray as xr # 基于生成的DataFrame整理列名(确保对应纬度、经度、目标变量) processed_df = pd.DataFrame({'Latitude': DataFrame['Latitude'], 'Longitude': DataFrame['Longitude'], 'S_Sum_2017': DataFrame['S_Sum_2017'] }) # 将纬度和经度设置为索引,转换为xarray Dataset后保存为NetCDF xr.Dataset.from_dataframe(processed_df.set_index(["Latitude","Longitude"])).to_netcdf("S_2017.nc")
内容的提问来源于stack exchange,提问作者jugimanni
相关产品推荐
相关产品推荐

