数据框类似于二维的关系表,含有一组有序的列,列与列之间的数据类型可以是不同的,但是单一列中的数据类型是相同的。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删除指定行列)