Pandas 学习 第2篇:数据框-DataFrame

数据框类似于二维的关系表,含有一组有序的列,列与列之间的数据类型可以是不同的,但是单一列中的数据类型是相同的。DataFrame既有行索引(index),也有列索引(columns),行索引也叫做行标签,列索引也叫做列标签。在构造函数中,columns参数用于设置每列的列标签,index用于为每行设置一个行标签。

一,创建数据框

数据框的构造函数:

DataFrame([data, index, columns, dtype, copy])

参数注释:

  • data:ndarray、list 或dict
  • index:索引标签列表
  • columns:列名列表
  • dtype:数据类型,默认值是None,推断(infer)
  • copy:从数据输入复制数据

1,使用字典来创建数据框

通过等长的字典来创建数据框,并可以设置数据框的列名和行索引。字典存储的是每列的数据:

>>> 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_index = ['one', 'two', 'three', 'four', 'five']
>>> col_names=['year', 'state', 'pop']
>>> df=pd.DataFrame(data,columns=col_names,index=row_index)
       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,使用列表(列表项是List)来创建数据框

列表项是列表,把该列表转换为DataFrame:

students = [ ['jack', 34, 'Sydeny'] ,
             ['Riti', 30, 'Delhi' ] ,
             ['Aadi', 16, 'New York'] ]
df = pd.DataFrame(students) 

3,使用列表(列表项是元组)来创建数据框

列表项是元组,把该列表转换为DataFrame:

students = [ ('jack', 34, 'Sydeny') ,
             ('Riti', 30, 'Delhi' ) ,
             ('Aadi', 16, 'New York') ]
df = pd.DataFrame(students) 

二,数据框的属性

数据框的属性主要是索引、列名、数据类型和值。

>>> import pandas as pd
>>> students = [ ['jack', 34, 'Sydeny'] ,
...              ['Riti', 30, 'Delhi' ] ,
...              ['Aadi', 16, 'New York'] ]
... 
>>> df = pd.DataFrame(students)

1,数据框的索引

通过index属性来访问数据框的行标签,通过columns属性访问数据框的列标签:

>>> df.index
RangeIndex(start=0, stop=3, step=1)
>>> df.columns
RangeIndex(start=0, stop=3, step=1)

2,数据类型

查看数据框各列的数据类型

>>> df.dtypes
0    object
1     int64
2    object
dtype: object

查看数据框中某一列的数据类型:

df['col_name'].dtypes

3,数据框的值

>>> df.values
array([['jack', 34, 'Sydeny'],
       ['Riti', 30, 'Delhi'],
       ['Aadi', 16, 'New York']], dtype=object)

4,数据框的轴、维度、元素数量和形状

>>> df.axes
[RangeIndex(start=0, stop=3, step=1), RangeIndex(start=0, stop=3, step=1)]
>>> df.ndim
2
>>> df.size
9
>>> df.shape
(3, 3)

三,数据框的类型转换

astype(dtype) 函数用于把数据框的列转换为特定的类型,dtype可以是pandas支持的类型,也可以是numpy.dtype,也可以是Python类型:

把数据框的列改变为字符串类型,str是python类型,'object'是pandas支持的字符串类型:

df['col_name'].astype(str)
df['col_name'].astype('object')

其他转换类型的函数

使用Pandas提供的函数如to_numeric()、to_datetime()

四,访问数据框

1,访问DataFrame的元素

通过列名,访问DataFrame的元素的方法有两种:索引方式和. 号方式,这两种方式返回的都是数据框中一整列的数据:

df['state']
df.state

通过行索引可以返回一整行的数据,行索引可以通过位置或名称来获取,使用对象的索引字段ix:

df.ix['three']

2,修改DataFrame对象

修改已有的数据,例如,设置第一列的值,把第一列的值全部设置为“NewYork”

df.state[0]='NewYork'

当对不存在的列赋值时,pandas会向DataFrame对象中新建一列:

df['avg_age']=34

关键字 del 用于删除DataFrame中的列:

del df['age']

3,DataFrame的索引

obj是DataFrame对象,有多种方式来索引DataFrame对象:

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

4,遍历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 DataFrame

Pandas实现数据类型转换的一些技巧

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

Pandas简易入门(一)

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

你可能感兴趣的:(Pandas 学习 第2篇:数据框-DataFrame)