pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操做工具和数据结构,最经常使用的数据结构是:序列Series和数据框DataFrame,Series相似于numpy中的一维数组,相似于关系表的一列;而DataFrame相似于二维的关系表。html
>>> import pandas as pd >>> from pandas import Series,DataFrame
用dtype属性来显示元素的数据类型,pandas主要有如下几种dtype:linux
Series 是由一组有序的数据以及与之相关的索引组成,能够经过索引来访问Series对象中的元素。数组
1,建立序列数据结构
仅使用一组数据就能够产生最简单的Series,此时索引是从0依次递增的整数:app
obj=Series([4,7,-5,3])
能够经过Series对象的values和index属性查看序列的值和索引:函数
obj.values ## array([4,7,-5,3]) obj.index ## Int64Index([0,1,2,3])
能够使用自定义的列表来建立序列:工具
obj=Series([4,7,-5,3],index=['d','b','a','c'])
若是数据存储在一个Python字典结构中,也能够直接经过字典来建立Series:学习
>>> sdata = {'b': 12, 'a': 13, 'd': 14, 'c': 10} >>> sd=pd.Series(sdata) b 12 a 13 d 14 c 10 dtype: int64
2,访问序列的元素spa
经过索引来访问序列的元素,并能够修改序列元素的值.net
sd['a']=4
数据框相似于二维的关系表,含有一组有序的列,每列能够是不一样的数据类型;DataFrame既有行索引(index),也有列索引(columns),能够认为,DataFrame的每一列都是一个Series对象。
1,使用DataFrame函数来建立数据框
经过等长的字典来建立数据框,并能够设置数据框的列名和行索引。
>>> data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], ... 'year': [2000, 2001, 2002, 2001, 2002], ... 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]} >>> row_num = ['one', 'two', 'three', 'four', 'five'] >>> col_names=['year', 'state', 'pop'] >>> df=pd.DataFrame(data,columns=col_names,index=row_num) year state pop one 2000 Ohio 1.5 two 2001 Ohio 1.7 three 2002 Ohio 3.6 four 2001 Nevada 2.4 five 2002 Nevada 2.9
2,访问DataFrame的元素
经过列名,访问DataFrame的元素的方法有两种:索引方式和. 号方式,这两种方式返回的都是数据框中一整列的数据:
df['state'] df.state
经过行索引能够返回一整行的数据,行索引能够经过位置或名称来获取,使用对象的索引字段ix:
df.ix['three']
3,修改DataFrame对象
修改已有的数据,例如,设置第一列的值,把第一列的值所有设置为“NewYork”
df.state[0]='NewYork'
当对不存在的列赋值时,pandas会向DataFrame对象中新建一列:
df['avg_age']=34
关键字 del 用于删除DataFrame中的列:
del df['age']
4,DataFrame的索引
obj是DataFrame对象,有多种方式来索引DataFrame对象:
5,遍历DataFrame
使用iterrows() 遍历数据框,iterrows()返回值为元组(index,row)
for index,row in otu.iterrows(): print(index,row)
drop()函数用于删除指定轴(Axis)上的数据项,
drop(labels=None, axis=0, index=None, columns=None,level=None, inplace=False):
参数注释:
注意:对于 inplace参数,若是设定为True,那么原始序列或数据框直接被替换;若是设置inplace=False,原始序列或数据框对应的内存值并不改变,要保留函数执行的结果,须要将新的结果赋给一个新的对象。先删除index=0的行,再删除列名为a的数据
1,基于index 和columns来删除数据
先删除index=0的行,再删除列名为a的数据
df.drop(index=0)
df.drop(colum='a')
2,基于labels和axis来删除数据
先删除 "行号为0" 的数据,再删除列名为a的数据
df.drop(labels=0, axis=0)
df.drop(labels='a',axis=1)
DataFrame对象有实例级别的函数:apply()函数引用于数组级别,applymap应用于元素级别。
定义一个函数fun,使用apply()函数把fun应用到由DataFrame对象的列构成的一维数组上,一般fun函数是由聚合函数构成的。
f=lambda x: x.max()-x.min df.apply(f)
定义一个函数foo,使用applymap()函数把函数foo应用于DataFrame对象的各个元素上,
foo=lambda x: '%.2f' % x df.applymap(foo)
而Series对象有map()方法,应用于Series对象的元素上。
pandas能够按照索引来排序,也能够按照值来排序。
1,按照索引排序sort_index
sort_index(axis=0,ascending=True)
参数注释:axis=0表示行,axis=1表示列;ascending=True表示按照升序排序
对于Series对象,s.sort_index() 表示按照行索引的升序来排序;
对于DataFrame对象,df.sort_indx(axis=1,ascending=False) 表示按照列名称的降序来排序。
2,按照值来排序
对于Series对象,使用order()对值进行排序
对于DataFrame对象,使用sort_index(by='col_name'),按照列值来排序;使用sort_index(by=['col_1','col_1','col_1']),按照多个列的值来排序。
3,按照值对数据排名rank
rank(axis=0,ascending=True,method='average')
参数注释:
axis:轴,默认值是0,表示在行上计算排名;值为1时表示在列上计算排名
排名时用于破坏平级关系的method选项:
pandas中的聚合函数:
这些函数的参数一般是:
缺失值NA是指数值类型的NaN和None,NaN能够使用numpy.nan来设置。
from numpy import nan as NA
处理缺失值的方法:
参考文档: