Python 学习 第十二篇:pandas

时间:2022-06-17 03:58:23

pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,最常用的数据结构是:序列Series和数据框DataFrame,Series类似于numpy中的一维数组,类似于关系表的一列;而DataFrame类似于二维的关系表。

>>> import pandas as pd
>>> from pandas import Series,DataFrame

一,数据类型

用dtype属性来显示元素的数据类型,pandas主要有以下几种dtype:

  • object:表示字符串类型
  • int:表示整数类型
  • float:表示浮点数类型
  • datetime:表示时间类型
  • bool:表示布尔类型

二,序列

Series 是由一组有序的数据以及与之相关的索引组成,可以通过索引来访问Series对象中的元素。

1,创建序列

仅使用一组数据就可以产生最简单的Series,此时索引是从0依次递增的整数:

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,访问序列的元素

通过索引来访问序列的元素,并可以修改序列元素的值

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对象:

  • obj[col]:选取DataFrame对象的单个列或一组列
  • obj.ix[row]:选取DataFrame对象的单行或一组行
  • obj.ix[:,col]:和obj[col]的作用相同,
  • obj.ix[row:col]:同时选取DataFrame对象的行和列
  • icol,irow:根据整数位置选取单列或单行

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):

参数注释:

  • labels:一个字符或者数值,或者是字符或数值的列表,和axis搭配,表示行索引或列索引
  • axis:axis=0表示行,axis=1表示列
  • columns:表示DataFrame对象的列名
  • index:表示DataFrame或Series对象的index, 如index=1, index='a'
  • inplace:True表示删除某行后原dataframe变化,False不改变原始dataframe

注意:对于 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)

五,apply和applymap

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选项:

  • average:默认,在相等分组中,为各个值分配平均排名
  • min:使用整个分组的最小排名
  • max:使用整个分组的最大排名
  • first:按值在原始数据中出现的顺序分配排名

七,聚合和计算描述性统计

pandas中的聚合函数:

  • count:非NA值的数量
  • desribe:针对Series或DataFrame各列计算汇总统计
  • min、max:计算最值
  • argmin、argmax:计算最值的索引位置
  • idxmin、idxmax:计算最值的索引值
  • quantile:分位数
  • sum、mean、median:值的总和,均值和中位数
  • cumsum:累计和
  • pct_change:计算百分数变化

这些函数的参数通常是:

  • axis:默认值是0,DataFrame对象的行是0,列是1
  • skipna:默认值是True,跳过缺失值

八,处理缺失值

缺失值NA是指数值类型的NaN和None,NaN可以使用numpy.nan来设置。

from numpy import nan as NA

处理缺失值的方法:

  • dropna:删除有缺失值的行或列
  • fillna:用指定值填充缺失值
  • isnull:返回一个含有布尔值的对象,表示哪些值是缺失值
  • notnull:返回一个含有布尔值的对象,表示哪些值不是缺失值

 

参考文档:

pandas 学习(1): pandas 数据结构之Series

Pandas简易入门(一)

Pandas: Drop函数(Dataframe删除指定行列)