【问题标题】:Convert Precipitation Data netcdf file to csv Using Python使用 Python 将降水数据 netcdf 文件转换为 csv
【发布时间】:2018-12-24 05:11:55
【问题描述】:

我正在尝试将 netcdf (*.nc)(经典格式)转换为 CSV。该文件取自 NOAA 降水数据集。

我在this post 中找到了有用的代码;但是,当我运行它时,我得到了这个异常:

Traceback(最近一次调用最后一次):文件“./test2.py”,第 31 行,在 precip_ts = pd.Series(precip, index=dtime) 文件“/usr/local/lib/python2.7/site-packages/pandas/core/series.py”,行 275,在 初始化 raise_cast_failure=True) 文件“/usr/local/lib/python2.7/site-packages/pandas/core/series.py”,行 第4165章 raise Exception('Data must be 1-dimensional') Exception: Data must be 1-dimensional

这是 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)

它在 Pandas 系列电话会议上失败了。你能给我任何指导为什么熊猫会失败吗?我认为它应该处理 2D 数据!

我正在寻找的最终结果是一个 CSV 文件,其中每一行都有 lon、lat、datetime、precip 值

【问题讨论】:

    标签: python python-2.7 pandas netcdf4


    【解决方案1】:

    这里,pd.Series() 似乎期待一个一维对象。而整个掩码阵列超过一维。所以要访问感兴趣的数组部分,可以通过'.data'等添加它。下面的代码显示了如何将precip_ts保存到csv。我不太了解我从here (precip.V1.0.2006.nc) 下载的“.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()
    

    编辑下面的行:将dtime 替换为dtime.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)
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 2017-11-05
      • 2019-09-20
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2015-05-19
      • 2014-05-20
      • 2019-10-11
      相关资源
      最近更新 更多