1. 首页 > 科技快讯 >

dataframe转换成array_dataframe取值

[Xarray] 1. 数据结构

参考 Xarray文档 , Python气象数据处理进阶之Xarray(1):Xarray的数据结构

dataframe转换成array_dataframe取值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 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息