Pandas库之DataFrame

1 简介

DataFrame是Python中Pandas库中的一种数据结构,它相似excel,是一种二维表python

或许说它可能有点像matlab的矩阵,可是matlab的矩阵只能放数值型值(固然matlab也能够用cell存放多类型数据),DataFrame的单元格能够存放数值、字符串等,这和excel表很像。shell

同时DataFrame能够设置列名columns与行名index,能够经过像matlab同样经过位置获取数据也能够经过列名和行名定位,具体方法在后面细说。数组

2 建立DataFrame

首先声明一下,如下都是使用的Python 3.6.5版本为例,Python2应该也差很少吧(大概数据结构

在全部操做以前固然要先import必要的pandas库,由于pandas常与numpy一块儿配合使用,因此也一块儿import吧。app

import pandas as pd
import numpy as np

若是还没安装直接在cmd里pip安装吧,若是有版本选择问题,参看以前的帖子。dom

pip install pandas
pip install numpy

2.1 直接建立

能够直接使用pandas的DataFrame函数建立,好比接下来咱们随机建立一个4*4的DataFrame。函数

df1=pd.DataFrame(np.random.randn(4,4),index=list('ABCD'),columns=list('ABCD'))

其中第一个参数是存放在DataFrame里的数据,第二个参数index就是以前说的行名(或者应该叫索引?),第三个参数columns是以前说的列名。spa

后两个参数可使用list输入,可是注意,这个list的长度要和DataFrame的大小匹配,否则会报错。固然,这两个参数是可选的,你能够选择不设置。3d

并且发现,这两个list是能够同样的,可是每行每列的名字在index或columns里要是惟一的。excel

使用python本身的shell展现建立的结果是这样的:

或者在jupyter里面更酷点的样子,接下来都使用jupyter输出展现吧。

固然,若是你的数据量贼小,也能够本身输入建立,相似这样。

df2=pd.DataFrame([[1,2,3,4],[2,3,4,5],
                  [3,4,5,6],[4,5,6,7]],
                 index=list('ABCD'),columns=list('ABCD'))

这样也能够获得这样子的DataFrame:

2.2 使用字典建立

仍然是使用DataFrame这个函数,可是字典的每一个key的value表明一列,而key是这一列的列名。好比这样。

dic1={'name':['小明','小红','狗蛋','铁柱'],'age':[17,20,5,40],'gender':['男','女','女','男']}
df3=pd.DataFrame(dic1)

输出结果是这样的

3 查看与筛选数据

python没有matlab的工做区直接查看变量与内容,这大概是python科学计算的一个缺点。因此须要格外的代码来查看,最基本的直接写变量名与print就不说了。

3.1 查看列的数据类型

使用dtypes方法能够查看各列的数据类型,好比说刚刚的df3。

df3.dtypes

输出的结果是这样:

3.2 查看DataFrame的头尾

使用head能够查看前几行的数据,默认的是前5行,不过也能够本身设置。

使用tail能够查看后几行的数据,默认也是5行,参数能够本身设置。

好比随意设置一个6*6的数据,只看前5行。

df4=pd.DataFrame(np.random.randn(6,6))
df4.head()

好比只看前3行。

df4.head(3)

好比看后5行。

df4.tail()

好比只看后2行。

df4.tail(2)

3.3 查看行名与列名

使用index查看行名,columns查看列名。具体由例子感觉吧。

查看行名。

df1.index

查看列名。

df3.columns

3.4 查看数据值

使用values能够查看DataFrame里的数据值,返回的是一个数组。

好比说查看全部的数据值。

df3.values

好比说查看某一列全部的数据值。

df3['name'].values

还有另外一种操做,使用loc或者iloc查看数据值(可是好像只能根据行来查看?)。区别是loc是根据行名,iloc是根据数字索引(也就是行号)。

好比说这样。

df1.loc['A']

或者这样。

df1.iloc[0]

按列进行索引查看数据还能直接使用列名,但这种方法对行索引不适用。

df3['name']

3.5 查看行列数

使用shape查看行列数,参数为0表示查看行数,参数为1表示查看列数。

df3.shape[0]

df3.shape[1]

4 基本操做

DataFrame有些方法能够直接进行数据统计,矩阵计算之类的基本操做。

4.1 转置

直接字母T,线性代数上线。

好比说把以前的df2转置一下。

df3.T

4.2 描述性统计

使用describe能够对数据根据列进行描述性统计。

好比说对df1进行描述性统计。

df1.describe()

若是有的列是非数值型的,那么就不会进行统计。

若是想对行进行描述性统计,请参看4.1(转置后进行describe呀!)

4.3 计算

使用sum默认对每列求和,sum(1)为对每行求和。好比

df3.sum()

能够发现就算元素是字符串,使用sum也会加起来。

df3.sum(1)

而一行中,有字符串有数值则只计算数值。

数乘运算使用apply,好比。

df2.apply(lambda x:x*2)

若是元素是字符串,则会把字符串再重复一遍。

乘方运算跟matlab相似,直接使用两个*,好比。

df2**2

乘方运算若是有元素是字符串的话,就会报错。

4.4 新增

扩充列能够直接像字典同样,列名对应一个list,可是注意list的长度要跟index的长度一致

df2['E']=['999','999','999','999']
df2

还能够使用insert,使用这个方法能够指定把列插入到第几列,其余的列顺延。

df2.insert(0,'F',[888,888,888,888])
df2

4.5 合并

使用join能够将两个DataFrame合并,但只根据行列名合并,而且以做用的那个DataFrame的为基准。以下所示,新的df7是以df2的行号index为基准的。

df6=pd.DataFrame(['my','name','is','a'],index=list('ACDH'),columns=list('G'))
df6
df7=df2.join(df6)
df7

可是,join这个方法还有how这个参数能够设置,合并两个DataFrame的交集或并集。参数为'inner'表示交集,'outer'表示并集。

df8=df2.join(df6,how='inner')
df8
df9=df2.join(df6,how='outer')
df9

若是要合并多个Dataframe,能够用list把几个Dataframe装起来,而后使用concat转化为一个新的Dataframe。

df10=pd.DataFrame([1,2,3,4],index=list('ABCD'),columns=['a'])
df11=pd.DataFrame([10,20,30,40],index=list('ABCD'),columns=['b'])
df12=pd.DataFrame([100,200,300,400],index=list('ABCD'),columns=['c'])
list1=[df10.T, df11.T, df12.T]
df13=pd.concat(list1)
df13

相关文章
相关标签/搜索