Pandas库之DataFrame使用的学习笔记

1 简介

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

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

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

2 创建DataFrame

首先声明一下,以下都是使用的Python 3.6.5版本为例,Python2应该也差不多吧(大概

在所有操作之前当然要先import必要的pandas库,因为pandas常与numpy一起配合使用,所以也一起import吧。

import pandas as pd
import numpy as np

如果还没安装直接在cmd里pip安装吧,如果有版本选择问题,参看之前的帖子。

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是之前说的列名。

后两个参数可以使用list输入,但是注意,这个list的长度要和DataFrame的大小匹配,不然会报错。当然,这两个参数是可选的,你可以选择不设置。

而且发现,这两个list是可以一样的,但是每行每列的名字在index或columns里要是唯一的。

使用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['E']=['999','999','999','999']
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'表示并集。

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

如果要合并多个Dataframe,可以用list把几个Dataframe装起来,然后使用concat转化为一个新的Dataframe。

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 对pandas的dataframe绘图并保存的实现方法

    对dataframe绘图并保存: ax = df.plot() fig = ax.get_figure() fig.savefig('fig.png') 可以制定列,对该列各取值作统计: label_dis = df.label.value_counts() ax = label_dis.plot(title='label distribution', kind='bar', figsize=(18, 12)) fig = ax.get_figure() fig.savefig('label_d

  • python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)

    前言 最近在网上搜了许多关于pandas.DataFrame的操作说明,都是一些基础的操作,但是这些操作组合起来还是比较费时间去正确操作DataFrame,花了我挺长时间去调整BUG的.我在这里做一些总结,方便你我他.感兴趣的朋友们一起来看看吧. 一.创建DataFrame的简单操作: 1.根据字典创造: In [1]: import pandas as pd In [3]: aa={'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]} In [4]: bb=

  • Python Pandas批量读取csv文件到dataframe的方法

    PYTHON Pandas批量读取csv文件到DATAFRAME 首先使用glob.glob获得文件路径.然后定义一个列表,读取文件后再使用concat合并读取到的数据. #读取数据 import pandas as pd import numpy as np import glob,os path=r'e:\tj\month\fx1806' file=glob.glob(os.path.join(path, "zq*.xls")) print(file) dl= [] for f i

  • pandas系列之DataFrame 行列数据筛选实例

    一.对DataFrame的认知 DataFrame的本质是行(index)列(column)索引+多列数据. 为了简化理解,我们不妨换个思路- 现实中,为了简化对一件事物的描述,我们会选择几个特征. 例如,从(性别.身高.学历.职业.爱好..)等角度去刻画一个人,这些"角度"即为"特征". 其中,不同的行表示不同的记录:列代表特征,不同记录因各个特征之间的差异而不同. DataFrame默认索引是序号(0,1,2-),可以理解成位置索引.一般我们用id标识不同记录,

  • python实现在pandas.DataFrame添加一行

    实例如下所示: from pandas import * from random import * df = DataFrame(columns=('lib', 'qty1', 'qty2'))#生成空的pandas表 for i in range(5):#插入一行<span id="transmark" style="display:none;"></span> df.loc[i] = [randint(-1,1) for n in ran

  • python pandas dataframe 按列或者按行合并的方法

    concat 与其说是连接,更准确的说是拼接.就是把两个表直接合在一起.于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat 函数的关键参数是axis . 函数的具体参数是: concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verigy_integrity=False) objs 是需要拼接的对象集合,一般为列表或者字典 axis=0 是

  • pandas修改DataFrame列名的方法

    在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,总结如下: 数据如下: >>>import pandas as pd >>>a = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]}) >>> a A B C 0 1 4 7 1 2 5 8 2 3 6 9 方法一:暴力方法 >>>a.columns = ['a','b','c'] >>

  • pandas.DataFrame 根据条件新建列并赋值的方法

    实例如下所示: import numpy as np import pandas as pd data = {'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou', 'Chongqing'], 'year': [2016,2016,2015,2017,2016, 2016], 'population': [2100, 2300, 1000, 700, 500, 500]} frame = pd.DataFrame(

  • 用pandas中的DataFrame时选取行或列的方法

    如下所示: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型 data.w #选择表格

  • Pandas 合并多个Dataframe(merge,concat)的方法

    在数据处理的时候,尤其在搞大数据竞赛的时候经常会遇到一个问题就是,多个表单的合并问题,比如一个表单有user_id和age这两个字段,另一个表单有user_id和sex这两个字段,要把这两个表合并成只有user_id.age.sex三个字段的表怎么办的,普通的拼接是做不到的,因为user_id每一行之间不是对应的,像拼积木似的横向拼接肯定是不行的. pandas中有个merge函数可以做到这个实用的功能,merge这个词会点SQL语言的应该都不陌生. 下面说说merge函数怎么用: df = p

随机推荐