簡體   English   中英

將時間序列數據從csv轉換為netCDF python

[英]Convert time series data from csv to netCDF python

此過程中的主要問題是以下代碼:

precip[:] = orig

產生以下錯誤:

ValueError: cannot reshape array of size 5732784 into shape (39811,144,144)

我有兩個CSV文件,其中一個CSV文件包含變量(降水)的所有實際數據,每一列都作為一個樁號,它們的相應坐標位於第二個單獨的CSV文件中。 我的示例數據在google驅動器中

如果您想查看數據本身,但是我的第一個CSV文件的形狀為(39811,144),而第二個CSV文件的形狀為(171,10)但請注意; 我只將切片的數據幀用作(144,2)。

這是代碼:

stations = pd.read_csv(stn_precip)
stncoords = stations.iloc[:,[0,1]][:144]
orig = pd.read_csv(orig_precip, skiprows = 1, names = stations['Code'][:144])

lons = stncoords['X']
lats = stncoords['Y']

ncout = netCDF4.Dataset('Precip_1910-2018_homomod.nc', 'w')

ncout.createDimension('longitude',lons.shape[0])
ncout.createDimension('latitude',lats.shape[0])
ncout.createDimension('precip',orig.shape[1])
ncout.createDimension('time',orig.shape[0])

lons_out = lons.tolist()
lats_out = lats.tolist()
time_out = orig.index.tolist()

lats = ncout.createVariable('latitude',np.dtype('float32').char,('latitude',))
lons = ncout.createVariable('longitude',np.dtype('float32').char,('longitude',))
time = ncout.createVariable('time',np.dtype('float32').char,('time',))
precip = ncout.createVariable('precip',np.dtype('float32').char,('time', 'longitude','latitude'))

lats[:] = lats_out
lons[:] = lons_out
time[:] = time_out
precip[:] = orig
ncout.close()

我主要將代碼建立在這篇文章的基礎上: convert-csv-to-netcdf,但不包含變量“ TIME”作為第三維,因此這就是我失敗的地方。 我認為我應該期望降水量變量具有以下形式的形狀(39811、144、144),但錯誤表明並非如此。

不完全確定如何處理此問題,感謝您的投入。

由於您具有來自不同測站的數據,因此我建議對您的netCDF文件使用維度station ,而不是將lonlat分開。 當然,您可以將每個測站的經度和緯度保存為單獨的變量。

這是一種可能的解決方案,以您的代碼為例:

#!/usr/bin/env ipython
import pandas as pd
import numpy as np
import netCDF4

stn_precip='Precip_1910-2018_stations.csv'
orig_precip='Precip_1910-2018_origvals.csv'
stations = pd.read_csv(stn_precip)
stncoords = stations.iloc[:,[0,1]][:144]
orig = pd.read_csv(orig_precip, skiprows = 1, names = stations['Code'][:144])

lons = stncoords['X']
lats = stncoords['Y']
nstations = np.size(lons)

ncout = netCDF4.Dataset('Precip_1910-2018_homomod.nc', 'w')

ncout.createDimension('station',nstations)
ncout.createDimension('time',orig.shape[0])

lons_out = lons.tolist()
lats_out = lats.tolist()
time_out = orig.index.tolist()

lats = ncout.createVariable('latitude',np.dtype('float32').char,('station',))
lons = ncout.createVariable('longitude',np.dtype('float32').char,('station',))
time = ncout.createVariable('time',np.dtype('float32').char,('time',))
precip = ncout.createVariable('precip',np.dtype('float32').char,('time', 'station'))

lats[:] = lats_out
lons[:] = lons_out
time[:] = time_out
precip[:] = orig
ncout.close()

因此有關輸出文件( ncdump -h Precip_1910-2018_homomod.nc )的信息如下所示: 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM