簡體   English   中英

使用 Python 將 .netCDF 文件轉換為 csv

[英]Convert netCDF file to csv using Python

我正在嘗試將 .netCDF 文件轉換為 csv。文件存儲在 thredds 服務器中。我編寫了下面的代碼,它從 Thredds 服務器和 select 中讀取 .netCDF 文件中存在的變量列表中的六個變量,並以 csv 格式在本地存儲它們.

from datetime import datetime
from netCDF4 import Dataset
import netCDF4
import pandas as pd
import csv
def get_thredds_url(datetime_group, forecast_hour):
    base_url="path"
    thredds_url="path"
    cycle_hour = "%02d" % datetime_group.hour
    file_str=datetime_group.strftime("%Y%m%d%H")+"/gfs.t%sz.pgrb2.0p25.f%03d" % \
        (cycle_hour, forecast_hour)
    url = base_url + thredds_url + file_str
    return (url)

下面的代碼顯示了所需的變量。

def main():

    datetime_group = datetime(2017, 9, 26, 0)
    forecast_hour = 240

    url = get_thredds_url(datetime_group, forecast_hour)
    print (url)

    nc_handle=Dataset(url)
    #print (nc_handle.variables.keys())
    lat=nc_handle.variables['lat'][:]
    lon=nc_handle.variables['lon'][:]
    issue_time=nc_handle.variables['time'][:]
    valid_time=nc_handle.variables['time1'][:]
    temp=nc_handle.variables['Temperature_height_above_ground'][:]
    dewpoint_temp=lat=nc_handle.variables['Dewpoint_temperature_height_above_ground'][:]
    dtime = netCDF4.num2date(issue_time[:],units=units)


 tmp = pd.Series(temp, index=dtime) 

    tmp.to_csv('temp.csv',index=True, header=True)
    csvwriter = csv.writer(tmp,  delimiter=',')
    print (csvwriter)





if __name__ == "__main__":
    main()

問題:我無法將文件寫入包含所有變量的 csvnformat,例如 lat、lon、time、time1、Temperature_height_above_ground。 所需的 output 如下:

tmp.csv

 lat lon time time1 Temperature_height_above_ground
1 ... .. ...  ....  ......
2 ... .. ...  ....  ......
3 ... .. ...  ....  ......

誰能幫我解決這個問題?

提前致謝!

我想你要找的是這個:

with open('temp.csv', 'w') as f:
  writer = csv.writer(f, delimiter=',')
  # write the header
  writer.writerow(['lat',
                   'lon',
                   'time',
                   'time1',
                   'temp_height_above_ground',
                   'dewpoint_temp_height_above_ground',
                   'issue_time'])

  # collect the columns as rows
  rows = zip(lat,lon,issue_time,valid_time,temp,dewpoint_temp,dtime)

  for row in rows:
    writer.writerow(row)

您可以使用 python 中的這個簡單代碼逐步將 .NETCDF 轉換為 CSV:- 我們需要 2 個主要庫

a-NetCDF-4:-(網絡通用數據表,第 4 版)描述。 NetCDF 是一組軟件庫和自描述、獨立於機器的數據格式,用於面向數組的科學數據

b-xarray :- xarray(以前稱為 xray)是一個開源項目 Python package,它使使用帶標簽的多維 arrays 變得簡單、高效且有趣!

1-導入庫

   import netCDF4 as nc
    import xarray as xr

    data = nc.Dataset(r'C:\\Users\\Admin\\Desktop\\LDN DATA NC FORMAT\\20210312_0257.nc', 'r')
    dataset = xr.open_dataset(xr.backends.NetCDF4DataStore(data))
    df = dataset.to_dataframe()
    csv_data=df.to_csv('C:\\Users\\Admin\\Desktop\\LDN DATA NC FORMAT\\20210312_0257.nc.csv')
    print('\nCSV String:\n', csv_data)

圖片 1:- 在此處輸入圖像描述

圖 2:- 在此處輸入圖像描述

執行完成后將csv文件保存在提供的同一個文件夾中

暫無
暫無

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

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