![](/img/trans.png)
[英]Extracting time series data from a netCDF file into a .csv with 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
,而不是將lon
和lat
分開。 當然,您可以將每個測站的經度和緯度保存為單獨的變量。
這是一種可能的解決方案,以您的代碼為例:
#!/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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.