簡體   English   中英

使用Python將降水量數據netcdf文件轉換為csv

[英]Convert Precipitation Data netcdf file to csv Using Python

我正在嘗試將netcdf(* .nc)(經典格式)轉換為CSV。 該文件取自NOAA降水量數據集。

我在這篇文章中找到了有用的代碼; 但是,當我運行它時,出現以下異常:

追溯(最近一次通話):文件“ ./test2.py”,第31行,位於precip_ts = pd.Series(precip,index = dtime)文件“ /usr/local/lib/python2.7/site-packages/ pandas / core / series.py”,第275行,在init中 raise_cast_failure = True)文件“ /usr/local/lib/python2.7/site-packages/pandas/core/series.py”,第4165行,在_sanitize_array中,異常(“數據必須為一維”)異常:數據必須為一維

這是test2.py腳本(與上面引用的帖子相同):

#!/usr/local/bin/python2.7

import netCDF4
import pandas as pd

precip_nc_file = 'precip.V1.0.2006.nc'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()

lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]

# a pandas.Series designed for time series of a 2D lat,lon grid
precip_ts = pd.Series(precip, index=dtime)

precip_ts.to_csv('precip.csv',index=True, header=True)

在“熊貓系列”電話中失敗了。 你能給我任何指導為什么大熊貓失靈嗎? 我以為應該處理2D數據!

我要尋找的最終結果是一個CSV文件,每行都有lon,lat,datetime,precip值

在這里, pd.Series()似乎期望使用一維對象。 而整個蒙版陣列大於一維。 因此,要訪問感興趣的數組部分,可以通過' .data '等添加。下面的代碼顯示了如何將precip_ts保存到csv 我對從這里下載的.nc文件的結構了解得不夠多( precip.V1.0.2006.nc )。 因為結果序列中元素的數量不相等。 因此,很難知道哪些值與其他值在同一行。 例如: lat有120個值,而lon有300個值。 另一方面,如果所有數組的長度相同,則可以將它們組合成單個pandas數據框,然后另存為csv文件(在最底部編碼)。

導入庫

import netCDF4
import pandas as pd
import numpy.ma as ma

來自下面重復問題的代碼

lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]

precip_nc_file = 'precip.V1.0.2006.nc'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()

編輯線以下:替換dtimedtime.data訪問掩蔽陣列

precip_ts = pd.Series(dtime.data, index=dtime)

另存為.csv

precip_ts.to_csv('precip.csv',index=True, header=True)

在此處輸入圖片說明

僅當不同系列的所有值都具有相同的長度時,下面的代碼才可以將它們全部保存到單個數據幀中。 這對我不起作用,因為下載的文件創建了一系列不相等的長度。

df = pd.DataFrame({
    'lat': lat,
    'lon': lon,
    'dtime': dtime,
    'precip': precip 
})
df.head(2)

暫無
暫無

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

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