[Xarray] 1. 数据结构
参考 Xarray文档 , Python气象数据处理进阶之Xarray(1):Xarray的数据结构
dataframe转换成array_dataframe取值
dataframe转换成array_dataframe取值
在Xarray中,数据是由结构和标签的,分为以下几种:
1.DataArray:
带有标注或命名维度的数组。DataArray将metadata(例如:维名称,坐标和属性)添加到基础的 未标记 的数据结构,例如numpy和Dask数组。
2.Datasets:
具有类似字典结构的尺寸对其的DataArray对象的 。因此,可以在单个DataArray的维度上执行的大多数作都可以在Dataset上执行。
Dataset是多个DataArray的
3.Variable:
类似于NetCDF的变量。由dimensions,data和attributes组成。variable和numpy数组之间的主要功能区别在于,对variable的数字运算可以通过 维名称 实现数组广播。
通俗的讲,variables < DataArray < Dataset (<指包含于)。这种解释不完全正确,但是初学者可以这样理解。
Xarray通过对维命名的作实现数据筛选和处理,实现数据的标记和命名通过以下几个定义实现:
Dimension : 每一轴的维名称(e.g.,('x','y','z'))。
Coordinate : 坐标或刻度。类似于字典的序列,将每个点标记。比如说dimension是纬度,那么对应的coordinate就是纬度坐标(90°N,89°N,88°N……89°S,90°S)。
Index : 索引号,也可以说是位置标号。a[0]代表a数组的一个数,0就是index。
可以看到,该文件是一个Datasets,里面含有变量:Data Variables,数据集的维度有经度纬度和时间,各自有各自的坐标Coordinates,同样数据集还有一些属性来表明数据集信息。
我们可以通过:
来分别查看数据集中包含的变量,维,坐标。
再比如NCEP的位势高度资料:
基本同上。
需要说明的是,ncl数据中存在short格式,在读取时需要使用short2flt()函数,但是在Python中不存在short格式,默认均为float,无需考虑这一点。
有时我们通过其他手段读取了相关数据,但是数据是np.array格式的,我们需要将其转换为DataArray,亦或我们需要输出一个NC文件,需要将计算后的数组转为DataArray格式,这就用到了创建的方法。
1.Data: 数据,可以是numpy ndarray,series,DataFrame,pandas.panel等格式
2.coords: 坐标列表或字典
如果是列表,则应为元组列表。其中个元素为dimension name,第二个元素是对应的坐标array_like对象。
用字典格式比较好
3.dims: 维名称列表
如果省略,并且coords是元组列表,则维度名称取自coords。
4.attrs: 属性
5.names: 变量名
以上,除了data外,都不是必须的。
创建示例如下:
上面提到,除了data以外,其他都是不必要的
如果是从一个DataFrame数据转化为DataArray的话(这种作通常是为了将Pandas和Xarray联合使用):
会自动识别行列的名称和序号。
文档还有更复杂的例子,需要的话再去查看。
在创建了数据之后,我们同样可以使用相关的作获取DataArray的各种信息:
如果想对DataArray的值修改可以通过以下两种方法:
两种结果是等价的,但只给出了种方法。
通过指令 foo.rename('temperature') 改名,比如通过hgt计算得到了一个新变量,需要改名,就可以用这个指令。
在得到一个DataArray后,用于画图时,比如我们需要获取它的经度和纬度(在这里,刚刚的例子是时间和高度),那么可以直接通过
这两种方式取出坐标信息。
要修改或者删除某坐标信息的话,原理和修改数据是一样的:
给出一个以气候数据为例的Dataset结构:
一个数据集,包含了数据主体(Temperature,Precipitation),维度坐标(latitude,longitude)。
根据的例子,一个Dataset是这样创建的,实际上与DataArray类似:
实际上这个例子与我们通常接触的不太一样,因为大部分数据的lat和lon都是一维的。
对Dataset的作和DataArray基本一致,不再重复。
dataframe数据类型是什么?
表格数据类型。DataFrame是由多个Series数据列组成的表格数据类型,每行Series值都增加了一个共用的索引。
既有行索引,又有列索引。
行索引,表明不同行,横向索引,叫index,0轴,axis=0。
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1。
数据结构
Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
Time- Series:以时间为索引的Series。
DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
Panel:三维的数组,可以理解为DataFrame的容器。
Panel4D:是像Panel一样的4维数据容器。
怎样将读取的数据转换为DataFrame类对象?
要将读取的数据转换为DataFrame类对象,可以使用pandas库提供的函数。一般来说,pandas支持的数据格式包括csv、excel、json、sql等。下面以读取csv格式的数据为例,给出一个示例代码:
import pandas as pd# 读取csv文件df = pd.read_csv('data.csv')# 打印读取的数据
print(df.head())
其中,pd.read_csv()函数用于读取csv格式的数据文件,并将其转换为DataFrame类对象。这里假设读取的文件名为data.csv,可以根据实际情况进行修改。如果需要读取其他格式的数据文件,也可以使用类似的方法,只需要将read_csv()函数替换为相应的读取函数即可。
Python基础命令都有什么?
(1)打开csv文件
import pandas as pd
df=pd.read_csv(r’data/data.csv’)
(2)dataframe index 重新排序
data=df.sort_index(axis=0,ascending=False)
(3)dataframe 按照某一列进行升序或者降序排列
data=df.sort([‘date’],ascending=True升序,False降序)
(4)dataframe 的index重新从0开始
data=data.reset_index(drop=True)
(5)画横坐标是日期的图
import matplotlib.pyplot as plt
x=data[‘date’]#日期是字符串形式
y=data[‘close price’]
plt.plot_date(x,y)
(6)求标准
import numpy as np
np.std
(7)下取整
import math
math.floor
上取整:math.ceil
(8)希尔伯特变换
from scipy import fftpack
hx= fftpack.hilbert(price)
(9)值排序
data.order()
(10)分
data.diff(1)#一阶分
dataframe 删除元素
data.drop(元素位置)
(11)嵌套的array处理方法
import itertools
a = [[1,2,3],[4,5,6], [7], [8,9]]
out = list(itertools.chain.from_iterable(a))
(12)dataframe修改列名
data.columns=[‘num’,’price’]
(13)excel表导入以后有空行解决办法
import numpy as np
data= data.drop(data.loc[np.isnan(data.name.values)].index)
(15)diff用法
一.是dataframe或者series格式,直接就用data.diff()
二.是list格式,先转换成转换成list格式data=data.tolist() 然后dif=np.diff(data)
(16)dataframe中的日期type不是date格式,不能直接相加减,所以先转换成list格式
t=data.time.tolist()
date_time = datetime.datetime.strptime(str(t),’%Y-%m-%d %H:%M:%S’)
date_time=datetime.date(date_time.year,date_time.month,date_time.day)
past= date_time - datetime.timedelta(days=n365)
(17)符号化
np.sign
(18)字典的使用
label={‘11’:’TP’,’1-1’:’FN’,’-11’:’FP’,’-1-1’:’TN’}
for i in range(len(data1)):
state=str(int(data1[i]))+str(int(data2[i]))
result.append(label[state])
(19)用plt画图的时候中文不显示的解决办法
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r”c:windowsontssimsun.ttc”, size=15)
plt.title(u’中文’, fontproperties=font_set)
(20)获取当前程序运行的时间
from time import time
time1=time()
time2=time()
print(time2-time1)
以上是我找到的资料,对于我这个学习Python到半吊子的人来说也是要收藏起来的。
2.基本数据类型Series和DataFrame
DataFrame数据结构是一种二维的结构。整个DataFrame包括三个部分:
各列的数据类型可以不同。
一维结构,带索引的一维数组,并且其中的数据类型一致。
DataFrame的任意一行或一列就是一个Series对象,比如我们通过 .loc[0] 获取到个样本:
Series对象的表现形式为:索引在左,取值在右。
从DataFrame中得到的Series会自动分配两个属性: name 和 dtype 。
对于输出(print)的Series对象,的 Name:0 表示该样本为个样本, dtype:object 表示数据类型为 object 。
可以通过 .index 和 .values 取出Series数据:
基本方式:
其中 data 可以为:
Pandas支持重复的索引值,index必须与data(ndarry)一样长。
或者省略index,index会默认为整数0到n-1,n为数据长度。
Python字典中的 键:值 与Series中的 索引:值 对应。所以可以直接转换:
即用单个数值直接创建:
在算术运算中,会自动通过index对齐数据,然后分别对index相同的数据计算。
unique() :返回Series去重后的数组。
values_counts() :查看每一个元素(data)的频数。
astype() :类型转换。如:
Pandas包含的数据类型:
data允许为:
DataFrame的显示可以调用 pd.set_option() 实现。
索引方法:
常用:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。