DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表。
或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matlab也可以用cell存放多类型数据),DataFrame的单元格可以存放数值、字符串等,这和excel表很像。
同时DataFrame可以设置列名columns与行名index,可以通过像matlab一样通过位置获取数据也可以通过列名和行名定位,具体方法在后面细说。
创建DataFrame:
首先我们需要导入pandas库与numpy库
1. import pandas as pd 2. import numpy as np
接下来我们就可以创建DataFrame了:
eg = pd.DataFrame(np.random.rand(3,2),columns=['left','Right'], index= ['one','two','three'], dtype=float)
首先我们传入我们需要构建的数据,这里是三行两列的一个数据,之后我们可以定义行的名称,列的名称,我们也可以不对其进行定义,默认值都是数字。我们得到的输出如下图所示:
我们也可以使用字典进行创建:
1. dic1={'name':['小明','小红','狗蛋','铁柱'],'age':[17,20,5,40],'gender':['男','女','女','男']} 2. eg = pd.DataFrame(dic1)
使用dtypes方法可以查看各列的数据类型,用法如下:
eg.dtypes
使用head可以查看前几行的数据,默认的是前5行,不过也可以自己设置。
使用tail可以查看后几行的数据,默认也是5行,参数可以自己设置。用法如下:
1. eg.head() 2. eg.tail()
使用index查看行名,columns查看列名,values可以查看DataFrame里的数据值。用法如下:
1. eg.index 2. eg.columns 3. eg.values
查看某一列所有的数据值:
eg['name'].values
使用loc或者iloc查看数据值,区别是loc是根据行名,iloc是根据数字索引(也就是行号)。
1. eg = pd.DataFrame(np.random.rand(3,2),columns=['left','Right'], index= ['one','two','three'], dtype=float) 2. print(eg.loc['one']) 3. print(eg.iloc[1])
按列进行索引查看数据还能直接使用列名,但这种方法对行索引不适用。
print(eg['left'])
使用shape查看行列数,参数为0表示查看行数,参数为1表示查看列数。
print(eg.shape[0])
转置
print(eg.T)
使用describe可以对数据根据列进行描述性统计:
print(eg.describe())
使用sum默认对每列求和,sum(1)为对每行求和。
1. print(eg.sum()) 2. print(eg.sum(1))
数乘运算使用apply,比如
print(eg.apply(lambda x:x*2))
乘方运算跟matlab类似,直接使用两个*,比如:
print(eg**2)
扩充列可以直接像字典一样,列名对应一个list,但是注意list的长度要跟index的长度一致。
还可以使用insert,使用这个方法可以指定把列插入到第几列,其他的列顺延。
1. eg = pd.DataFrame(np.random.rand(3,2),columns=['left','Right'], index= ['one','two','three'], dtype=float) 2. eg['E'] = [999,999,999] 3. eg.insert(0,'F',[888,888,888]) 4. print(eg)
使用join可以将两个DataFrame合并,但只根据行列名合并,并且以作用的那个DataFrame的为基准。如下所示,新的df7是以df2的行号index为基准的。
1. eg = pd.DataFrame(np.random.rand(3,2),columns=['left','Right'], index= ['one','two','three'], dtype=float) 2. df6=pd.DataFrame([10,10,10],index= ['one','two','three'],columns=list('G')) 3. print(eg.join(df6))
如果要合并多个Dataframe,可以用list把几个Dataframe装起来,然后使用concat转化为一个新的Dataframe。
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!