学习如何使用xarray从DFs生成netCDF文件。在几个教程和SO问题之后,我向xarray数据集添加了“常量”维度,并向xarray数据集添加了“常量”维度,但仍然存在一些问题,因为我无法将日期、时间、纬度和经度作为维度。当我进行nc转储时,它们是不正确的。
最初的方法是将txt文件导入熊猫df,然后将xr导入netCDF:
import pandas as pd
import xarray
#IMport Data from .dat file
colnames1 = ['Date','Time','latitude','longitude','Status','depth']
df2 = pd.read_csv('test.txt',header=0,error_bad_lines=False, names = colnames1,delim_whitespace=True)
# create xray Dataset from Pandas DataFrame
xr = xarray.Dataset.from_dataframe(df2)
# add variable attribute metadata
xr['latitude'].attrs={'units':'degrees', 'long_name':'Latitude'}
xr['longitude'].attrs={'units':'degrees', 'long_name':'Longitude'}
xr['depth'].attrs={'units':'m', 'long_name':'depth'}
# add global attribute metadata
xr.attrs={'Conventions':'CF-1.6', 'title':'Data', 'summary':'Data generated'}
#print xr
print xr
# save to netCDF
xr.to_netcdf('test.nc')
其中df2=
Date Time grid_latitude grid_longitude Status depth
2017-09-05 13:01:59 -29.034083 31.068567 2.0 0.0
2017-09-05 13:01:59 -29.039367 31.059150 2.0 0.0
2017-09-05 13:01:59 -29.036650 31.059200 3.0 0.0
2017-09-05 13:01:59 -29.036750 31.065417 7.0 100.0
2017-09-05 13:01:59 -29.039317 31.056050 7.0 100.0
2017-09-05 13:01:59 -29.034000 31.062367 3.0 0.0
2017-09-05 13:01:59 -29.036517 31.049900 3.0 0.0
2017-09-05 13:01:59 -29.031100 31.050000 3.0 0.0
这工作正常,但尺寸不正确(见下文):
<xarray.Dataset>
Dimensions: (index: 8)
Coordinates:
* index (index) int64 0 1 2 3 4 5 6 7
Data variables:
Date (index) object '2017-09-05' '2017-09-05' '2017-09-05' ...
Time (index) object '13:01:59' '13:01:59' '13:01:59' '13:01:59' ...
latitude (index) float64 -29.03 -29.04 -29.04 -29.04 -29.04 -29.03 ...
longitude (index) float64 31.07 31.06 31.06 31.07 31.06 31.06 31.05 31.05
Status (index) float64 2.0 2.0 3.0 7.0 7.0 3.0 3.0 3.0
depth (index) float64 0.0 0.0 0.0 100.0 100.0 0.0 0.0 0.0
Attributes:
title: Data
summary: Data generated
Conventions: CF-1.6
如果我将日期或合并Date_Time设置为DF索引,则日期/时间的维度很好,可以视为维度:
<xarray.Dataset>
Dimensions: (Date: 8)
Coordinates:
* Date (Date) object '2017-09-05' '2017-09-05' '2017-09-05' ...
Data variables:
Time (Date) object '13:01:59' '13:01:59' '13:01:59' '13:01:59' ...
latitude (Date) float64 -29.03 -29.04 -29.04 -29.04 -29.04 -29.03 ...
longitude (Date) float64 31.07 31.06 31.06 31.07 31.06 31.06 31.05 31.05
Status (Date) float64 2.0 2.0 3.0 7.0 7.0 3.0 3.0 3.0
depth (Date) float64 0.0 0.0 0.0 100.0 100.0 0.0 0.0 0.0
Attributes:
title: Data
summary: Data generated
Conventions: CF-1.6
但是,如果在DATEJOTE、LAT和Lon上设置DF.index,则返回到空白(index)。希望能有指针来设置尺寸。对于netCDF模块,可以使用以下语法:lat=dataset.createDimension('lat',73)来创建维度。因此,向xarray DataArray添加维度的示例也没有帮助。也许我错过了什么,或者这是我在学习上的局限。我想让它达到nc转储生成类似于此的内容的程度。
NetCDF dimension information:
Name: lat
size: 73
type: dtype('float32')
units: u'degrees_north'
actual_range: array([ 90., -90.], dtype=float32)
long_name: u'Latitude'
standard_name: u'latitude'
axis: u'Y'
Name: lon
size: 144
type: dtype('float32')
units: u'degrees_east'
long_name: u'Longitude'
actual_range: array([ 0. , 357.5], dtype=float32)
standard_name: u'longitude'
axis: u'X'
Name: time
size: 366
type: dtype('float64')
units: u'hours since 1-1-1 00:00:0.0'
long_name: u'Time'
actual_range: array([ 17628096., 17636856.])
delta_t: u'0000-00-01 00:00:00'
standard_name: u'time'
axis: u'T'
avg_period: u'0000-00-01 00:00:00'
否则我可以将DF列转换为np数组,并使用netCDF模块?非常感谢。我曾尝试过这样的尝试,但我怀疑它是否在正确的道路上:
#add dimeensions
#d = {}
#d['time'] = ('time',df2.Time)
#d['latitude'] = ('latitude',df2.latitude)
#d['longitude'] = ('longitude', df2.longitude)
#d['var'] = (['time','latitude','longitude','Depth'], xr)
#xr = xray.Dataset(d)
这最容易通过将Time
,grid_latitude
和grid_longitude
组合成熊猫来实现。DataFrame上的MultiIndex
与set_index()
,然后转换为xaryDataset。
例如:
# note that pandas.DataFrame's to_xarray() method is equivalent to
# xarray.Dataset.from_dataframe()
ds = df.set_index(['Time', 'grid_latitude', 'grid_longitude']).to_xarray()
我有一个netCDF文件。结构: 如何提取特定经纬度(比如86.45,-156.25)和时间(比如2016-01-10)的网格单元的值?精确的纬度/经度值可能不在坐标中,在这种情况下,我们需要最接近的纬度/经度值 我可以像这样提取特定经度的值: 然而,由于-20在经度坐标中不存在,因此这不起作用。
我有一个来自ERA5的2m温度netcdf文件,从2000年到2019年,从04月到10月,总共有13680个时间步长和61x161个纬度。我想分别计算每年所有每日时间步长的月平均值。例如,我们将获得2000年4月、2000年5月等数据的月平均值。我用xarray resample尝试了下面的代码,但是出现了两个问题。 出于某种原因,多年来,中庸之道似乎都是如此 重采样函数创建01、02、03、1
我一直在寻找退出来解决我的问题,但我仍然无法解决它。我想将一个 nedCDF 文件导入 R 中。喜欢这个: 我得到以下内容 然后我想提取降水数据,例如一天中的一个网格单元: 但是我收到错误消息,例如:n_prec[1, 1, 1, 1]中的错误:错误的尺寸数 我不明白,因为数据集有维度。但是我可能误解了一些东西,因为我对r很陌生。 我很高兴得到任何帮助。曼纽尔
我正在尝试创建符合cf的netcdf文件。我可以让它与xarray兼容98%的cf,但我遇到了一个问题。当我对正在创建的文件执行ncdump时,我会看到以下内容: 我的数据集的坐标是lat、lon和time。当我通过ds.to_netcdf()转换为netcdf时,所有坐标变量都会自动应用填充值,因为它们是浮点数。应用填充值的坐标变量违反cf标准(http://cfconventions.org/
xarray 是一个开源 Python 包,它可以使处理多维数组更加简单、高效并有趣。xarray 在原始类 NumPy 多维数组中引入了标签化的变量名称和坐标索引,实现了更直观、更简洁和更加不容易出错的能力。该软件包包括一个庞大且不断增长的域无关功能库,用于使用这些数据结构进行高级分析和可视化。xarray 灵感来自同为解决数据分析任务而诞生的 pandas。 多维数组(张量)是计算科学的重要组
本文向大家介绍解决Python pandas df 写入excel 出现的问题,包括了解决Python pandas df 写入excel 出现的问题的使用技巧和注意事项,需要的朋友参考一下 学习Python数据分析挖掘实战一书时,在数据预处理阶段,有一节要使用拉格朗日插值法对缺失值补充,代码如下: 1.import xlwt 错误 这个问题比较简单,只需要在官网上下载安装或者直接在编译器中运行如