我在将netCDF文件(这是一个掩码numpy数组)转换为csv文件时遇到了问题。netcdf文件由12个单独的文件压缩而成,形成一个12 x 52 x 39的3D阵列,其中12对应于月份,52对应于纬度,29对应于经度。
更新:我想要的csv输出是4列,具有网格号(0-437)、纬度、经度和总降水量。例如:
grid number| latitude| longitude| Total_precipitation
0 60.5000 -1.2345 800.123
1 . . .
2 . . .
我想总结我12个月的降水量,并将数据浓缩成一列。(我在这里没有找到任何答案来帮助我做这件事)
目前,我已经设法读入netCDF文件,并将其保存为csv格式,但它的格式是错误的(见方法1-3)。
这是我到目前为止所拥有的:
###################
# importing modules
###################
import pandas as pd
import numpy as np
import os
import sys
#import csv
from netCDF4 import Dataset
#setting up directory
CURRENT_DIR = os.path.abspath(os.curdir)
precip_path = os.path.join(CURRENT_DIR + '/CLIM8Splash/input/futureCLIM8/precip_2070_2099CDF')
sys.path.append(precip_path)
# reading precip netcdf
os.chdir('CLIM8_splash/input/futureCLIM8/precip_2070_2099CDF/')
files = ['jan_precip_2070_2099CDF.nc', 'feb_precip_2070_2099CDF.nc', 'mar_precip_2070_2099CDF.nc', 'apr_precip_2070_2099CDF.nc','may_precip_2070_2099CDF.nc', 'jun_precip_2070_2099CDF.nc', 'jul_precip_2070_2099CDF.nc', 'aug_precip_2070_2099CDF.nc', 'sep_precip_2070_2099CDF.nc', 'oct_precip_2070_2099CDF.nc', 'nov_precip_2070_2099CDF.nc', 'dec_precip_2070_2099CDF.nc']
#all_precip = ma.zeros((len(files), 52, 39))
all_precip = np.zeros((len(files), 52, 39))
all_precip.fill(np.nan)
for idx, x in enumerate(files):
ds = Dataset(x, 'r')
precip = ds.variables['cdf_precip_dmean_tmean_abs'][:, :]
all_precip[idx, :, :] = precip
ds.close()
os.chdir('../../../..')
#dimensions of netCDF file
def altReadin(path):
my_file = Dataset(path)
print(my_file.file_format)
print("Dimensions: " + str(my_file.dimensions.keys()))
print(my_file.variables['rlon'])
content = MFDataset(path, False, 'rlon')
print(content.variables['cdf_precip_dmean_tmean_abs'][:])
print("Variables: "+ str(my_file.variables.keys()))
altReadin(FILE_PATH)
#####OUTPUT
NETCDF3_CLASSIC
Dimensions: [u'rlat', u'bound', u'rlon']
<type 'netCDF4._netCDF4.Variable'>
float32 rlon(rlon)
bounds: bounds_rlon
topology: circular
long_name: longitude in rotated pole grid
standard_name: grid_longitude
units: degrees
modulo: 360.0
axis: X
unlimited dimensions:
current shape = (39,)
filling off
[[-- -- -- ..., -- -- --]
[-- -- -- ..., 5.498641490936279 5.392685890197754 --]
[-- -- -- ..., 5.66285514831543 -- --]
...,
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]]
Variables: [u'rlat', u'bounds_rlat', u'rlon', u'bounds_rlon', u'lat', u'lon', u'cdf_precip_dmean_tmean_abs', u'rotated_pole', u'meaning_period', u'time', u'em_scen', u'percentile']
#Totalling 12 months of precipitation
#????
# and then converting it to a csv
precip_tot = precip
#Method 1 saves csv with grid shape preserved
np.savetxt("precip_fut1.csv", precip, delimiter=",")
#Method 2 csv as a long string
precip_tot.sum(axis=0).filled().tofile('precip_tot_fut.csv', sep=',')
#Method 3 netcdf>dataframe>csv (still preserves shape)
precip_tot = pd.DataFrame(precip_tot)
precip_tot.to_csv("precip.csv")
#sample of output of precip
>>> >>> [[-- -- -- ..., -- -- --]
[-- -- -- ..., 7.167891502380371 6.648772716522217 --]
[-- -- -- ..., 7.282683372497559 -- --]
...,
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]
[-- -- -- ..., -- -- --]]
print(precip_tot.head()
0 1 2 3 4 5 6 7 8 9 ... 29 30 31 32 33 34 35 \
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN
36 37 38
0 NaN NaN NaN
1 7.167892 6.648773 NaN
2 7.282683 NaN NaN
3 7.517180 NaN NaN
4 NaN NaN NaN
[5 rows x 39 columns]
谢谢你帮助我!
考虑这些数据帧,为了简洁起见,维数被减少。
示例数据:
lat(5,)[ 60.5 61.5 62.5 63.5 64.5]
lon(4,)[-0.2345 -1.2345 -2.2345 -3.2345]
preceip(5, 4)[[ nan nan nan nan]
[ nan nan 5.49864149 5.39268589]
[ nan nan 5.66285515 nan]
[ nan nan nan nan]
[ nan nan nan nan]]
您的数据:
lon = ds.variables['rlon'][:, :]
lat = ds.variables['rlat'][:, :]
precip = ds.variables['cdf_precip_dmean_tmean_abs'][:, :]
读取< code>precip数组,追加非空数据:
precip_list = []
precip_tot = 0
for r in range(len(lat)):
for c in range(len(lon)):
if precip[r,c] > 0:
precip_list.append((lat[r], lon[c], precip[r,c]))
precip_tot += precip[r,c]
precip_list.append(('', 'precip_tot:', precip_tot))
fieldnames = ['grid number', 'latitude','longitude', 'Total_precipitation']
print('{fn[0]}\t{fn[1]}\t{fn[2]}\t{fn[3]}'.format(fn=fieldnames))
for i, d in enumerate(precip_list[:-1]):
print('{:<10}\t{:>8.4f}\t{:>9.4f}\t{:10.3f}'.format(i, d[0], d[1], d[2]))
print('{}precip_tot:\t{:10.3f}'.format('\t'*6, precip_tot))
输出:
grid number latitude longitude Total_precipitation
0 61.5000 -2.2345 5.499
1 61.5000 -3.2345 5.393
2 62.5000 -2.2345 5.663
precip_tot: 16.554
使用Python测试:3.4.2
问题内容: 我在一个一维数组中有一个例子。它只会输出列。我的想法是使用2d数组选择行和列。这是我的代码: myfile.csv 输出: 名字蒂姆汤姆 问题答案: 我只是将split结果()添加到a中,如果您确实希望将其作为2d数组,则在事后将其转换。
问题内容: 如何将数组转换为CSV文件? 这是我的数组: 问题答案: 我正在使用以下功能;它是对fputscsv注释中的man条目之一的改编。而且您可能想要展平该数组;不知道如果您传递一个多维的行会发生什么。
问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿
问题内容: 我正在尝试将代表黑白图像的2D Numpy数组转换为3通道OpenCV数组(即RGB图像)。 基于代码示例和文档,我正尝试通过Python执行此操作,例如: 但是,对CvtColor()的调用将引发以下cpp级异常: 我究竟做错了什么? 问题答案: 您的代码可以固定如下: 简短说明: 数据类型不受OpenCV的支持(它支持,,,,,,) 无法处理numpy数组,因此必须将两个参数都转换
问题内容: 我想将图像转换为NumPy数组再转换为PySide QPixmap,因此可以显示它(在PySide UI中编辑:)。我已经找到了此工具:qimage2ndarray,但它仅适用于PyQt4。我试图对其进行更改以使其能够与PySide一起使用,但是我将不得不更改该工具的C部分,并且我没有使用C的经验。我该怎么做?或者有其他选择吗? 问题答案: 一种选择是仅使用PIL库。 您可以在http
问题内容: 有没有办法将NumPy数组转储到CSV文件中?我有一个2D NumPy数组,需要以人类可读的格式转储它。 问题答案: 将数组保存到文本文件。