Python读取nc格式的CSIF数据转成csv格式

Python读取nc格式的CSIF数据转成csv格式

1 下载安装netCDF4包

使用清华大学的镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple netCDF4

2 编写程序

2.1 获取netCDF4文件的格式 1


from netCDF4 import Dataset
import numpy as np
import os

path = "F:\\OCO2.SIF.all.daily.2001.nc"
csv_path = "F:\\test.csv"
dst = Dataset(path, mode='r', format="netCDF4")

print(dst)
运行结果:
<class 'netcdf4._netcdf4.dataset'>
root group (NETCDF4 data model, file format HDF5):
    dimensions(sizes): lat(360), lon(720), doy(92)
    variables(dimensions): float32 lat(lat), float32 lon(lon), int16 doy(doy), float32 all_daily_sif(doy, lat, lon)
    groups:
</class>

由上可见CSIF数据all_daily_sif是三维的,具体size为:
d o y ( 92 ) × l a t ( 360 ) × l o n ( 720 ) doy(92)\times lat(360)\times lon(720)d o y (9 2 )×l a t (3 6 0 )×l o n (7 2 0 )
由于CSIF时间分辨率是4天,所以doy维是92;空间分辨率是0.5°,所以lat是360,lon是720。


print(dst.variables.keys())
for i in dst.variables.keys():
    print('%s: %s' % (i, dst.variables[i].ncattrs()))
&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#x662F;&#xFF1A;
dict_keys(['lat', 'lon', 'doy', 'all_daily_sif'])
lat: ['units', 'standard_name', 'axis', 'long_name']
lon: ['units', 'standard_name', 'axis', 'long_name']
doy: []
all_daily_sif: ['missing_value']

print(dst.variables.keys())
for i in dst.variables.keys():
    print(dst.variables[i])
    print('\n')
&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#xFF1A;
dict_keys(['lat', 'lon', 'doy', 'all_daily_sif'])
<class 'netcdf4._netcdf4.variable'>
float32 lat(lat)
    units: degrees_north
    standard_name: latitude
    axis: Y
    long_name: latitude
unlimited dimensions:
current shape = (360,)
filling on, default _FillValue of 9.969209968386869e+36 used

<class 'netcdf4._netcdf4.variable'>
float32 lon(lon)
    units: degrees_east
    standard_name: longitude
    axis: X
    long_name: longitude
unlimited dimensions:
current shape = (720,)
filling on, default _FillValue of 9.969209968386869e+36 used

<class 'netcdf4._netcdf4.variable'>
int16 doy(doy)
unlimited dimensions:
current shape = (92,)
filling on, default _FillValue of -32767 used

<class 'netcdf4._netcdf4.variable'>
float32 all_daily_sif(doy, lat, lon)
    missing_value: -999.9
unlimited dimensions:
current shape = (92, 360, 720)
filling on, default _FillValue of 9.969209968386869e+36 used

</class></class></class></class>

for i in dst.dimensions.keys():
    print('%s_sizes: %s' % (i, dst.dimensions[i].size))
&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#xFF1A;
lat_sizes: 360
lon_sizes: 720
doy_sizes: 92

2.2 提取nc数据转存为csv 2 3


    IniSif = dst.variables['all_daily_sif'][:].data
    latdata = dst.variables['lat'][:].data
    londata = dst.variables['lon'][:].data

    latname = []
    lonname = []
    for lat in range(0, 360):
        latname.append(str(latdata[lat]))
    for lon in range(0, 720):
        lonname.append(str(londata[lon]))

    sif = IniSif[0][:]
    sifframe = pd.DataFrame(sif, index=latname, columns=lonname)
    for doy in range(1,92):

        sif = IniSif[doy][:]

        siflist = pd.DataFrame(sif,index = latname,columns =lonname)

        sifframe = pd.concat([sifframe, siflist])

    sifframe.to_csv(csv_path,sep=',')
    dst.close()

生成csv文件如下图所示,列索引为lon值,行索引为lat值:

Python读取nc格式的CSIF数据转成csv格式

Original: https://blog.csdn.net/suexisang/article/details/122727130
Author: 细细47
Title: Python读取nc格式的CSIF数据转成csv格式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/695539/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球