pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,最常用的数据结构是:序列Series和数据框DataFrame。
序列是具有单一类型的一维数组,表示多行一列的数据结构,由于一列中的元素必须是相同的,因此,序列中的数据具有相同的数据类型;行具有索引和行标签属性,每行都有一个索引和行标签。而DataFrame类似于二维的关系表,每列的数据类型是相同的。
一,pandas的数据类型
用dtype属性来显示元素的数据类型,pandas主要有以下几种dtype:
- object:表示字符串类型
- int:表示整数类型
- float:表示浮点数类型
- datetime:表示时间类型
- bool:表示布尔类型
- category:分类
二,创建序列
序列(Series
)是由一组有序的数据以及与之相关的索引组成,能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签和下标统称为索引,可以通过索引来访问Series对象中的元素。
序列的构造函数定义是:
pandas.Series( data, index, dtype, copy)
构造函数的参数:
- data:数据可以是ndarray、list或字典
- index:设置索引标签,索引标签必须是唯一的,与数据的长度相同;如果没有传递索引标签,那么默认值是 np.arange(n)
- dtype:用于数据类型,如果没有设置,那么将推断数据类型
- copy:复制数据,默认值是false
索引的下标是自动生成的,从0开始,加1递增。
1,创建空的序列
s=pd.Series()
2,使用ndarray创建序列
创建ndarray的一维数组,构造序列,序列包含两部分:索引和序列值,如下所示
>>> import pandas as pd >>> import numpy as np >>> data=np.array([‘a‘,‘b‘]) >>> pd.Series(data) 0 a 1 b dtype: object >>>
这里没有传递任何索引,默认情况下,pandas分配了从 0 到 len(data)-1 的索引。也可以在构造函数中传递自定义的索引列表,如下所示:
>>> pd.Series(data,index=[101,102]) 101 a 102 b dtype: object
3,从列表构造序列
仅使用一组数据就可以产生最简单的Series,此时索引是从0依次递增的整数:
s=pd.Series([4,7,-5,3])
可以通过Series对象的values和index属性查看序列的值和索引:
s.values ## array([4,7,-5,3]) s.index ## Int64Index([0,1,2,3])
也可以使用自定义的列表来创建序列:
s=pd.Series([4,7,-5,3],index=[‘d‘,‘b‘,‘a‘,‘c‘])
4,从字典构造序列
可以直接通过字典来创建Series,其中,字典的key作为序列的索引,字典的value作为序列值:
>>> sdata = {‘b‘: 12, ‘a‘: 13, ‘d‘: 14, ‘c‘: 10} >>> sd=pd.Series(sdata) b 12 a 13 d 14 c 10 dtype: int64
三,访问序列的元素
序列元素的访问,可以通过索引,下标,索引是在构造函数中通过index参数传递或构造的,而下标是默认生成的,第一个元素的下标值是0,依次加1递增。
1,通过下标来访问序列
下表从0开始,依次加1递增,访问序列的第一个元素:
>>> sd[0] 12
访问序列的前三个元素,下表为负,表示从方向来访问:
sd[:3]sd[-3:]
2,通过索引标签来访问序列的元素
通过索引来访问序列的元素,并可以修改序列元素的值
sd[‘a‘]=4
也可以传递多个索引标签:
>>> sd[[‘a‘,‘b‘]] a 13 b 12
四,序列的属性
序列对象包含的属性:
- array:把序列转换为数组
- dtype:序列元素的数据类型
- hasnan:序列是否包含nan
- axes:序列的轴标签
- index:序列的索引标签
- values:序列的值属性
- is_unique:序列的元素是否是唯一的
- size:序列的元素数量
- shape:序列的形状,表示各个维度的数量
- ndim:维度的数量
序列对象还能通过属性来访问序列的元素值。
1,at和iat属性,用于访问单个序列元素值
at属性表示的是索引标签和元素值对,通过索引标签访问单个序列值
>>> sd.at[‘a‘] 13
iat属性表示的下表和元素值对,通过下表访问序列的单个元素值:
>>> sd.iat[1] 13
2,loc和iloc,通过序列的位置来访问元素
iloc:纯粹基于整数位置的索引,用于按位置选择序列元素
- 单个位置索引,比如sd.iloc[1]
- 位置索引的列表,比如 sd.iloc[[0,1]]
- 整数序列,比如,sd.iloc[0:2]
- 布尔值数组,sd.iloc[[True, False, True, False]]
loc:通过索引标签和布尔值数组来选择序列的元素
举个例子,通过整数序列来选择序列的元素:
>>> sd.iloc[0:2] b 12 a 13
举个例子,通过索引的标签来选择序列的元素:
>>> sd.loc[[‘a‘,‘b‘]] a 13 b 12 dtype: int64
3,ix属性
ix属性是最首要的标签-位置的索引器,具有整数位置的回退,注意,不推荐使用ix索引器。
- .ix []支持基于整数和标签混合的访问,它主要基于标签,但将回退到整数位置访问,除非相应的轴是整数类型。
- .ix是最常用的索引器,它将支持.loc和.iloc中的任何输入。
- 但是,当轴基于整数时,仅支持基于标签的访问而非位置访问。 因此,在这种情况下,通常最好是明确的并使用.iloc或.loc。
举个例子,ix索引器既支持整数,也支持标签的访问。
>>> sd.ix[1] >>> sd.ix[‘a‘]
五,序列的函数
通过序列对象直接调用函数对数据进行处理
1,聚合
调用函数对序列的元素进行聚合
agg(self, func[, axis]) aggregate(self, func[, axis])
2,对序列元素调用函数
apply(self, func[, convert_dtype, args])
参考文档:
原文地址:https://www.cnblogs.com/ljhdo/p/11514685.html