前一篇文章提到了Python数据结构:神奇的序列,可以理解为Excel里没有列名的一列数据,那么Excel里的由行列组成的表数据是如何对应到Python中的呢?就是今天要说的数据框:DataFrame。

它是由一组数据和一对索引(行索引和列索引)组成的二维数据结构,可以看成Excel里的表格,与Series不同的是,DataFrame可以有多行/列数据。

1.建

首先要导入pandas模块,简写为pd。

In [1]:import pandas as pd从列表中创建DataFrame# 从列表中创建list1 = [2,5,8,10]df_l = pd.DataFrame(list1)df_l

结果:

这里传入的是一个单一的列表,得到的是带有行列索引的一列数据,行索引用index表示,就是这里最前面竖着的那一列[0,1,2,3],相当于Excel里的第一列,列索引用columns表示,相当于Excel里的第一行,由于没有指定索引,因此都是默认从0开始递增的索引,这里横排第一行就是列索引,除去行列索引,中间的区域为values:值区域。

从字典中创建

# 从字典中创建dict1 = {'name':['Tony','Nancy','Judy','Cindy'],        'age':[16,17,18,15],        'sex':['male','female','female','female']}df_d = pd.DataFrame(dict1)df_d

结果:

image

从字典中创建DataFrame,每个键就默认为columns。从嵌套列表中创建

嵌套列表顾名思义,就是列表中还有列表,这种方式也可以创建数据框,同字典不同的是,字典创建的数据框键值对是一列一列的,嵌套列表创建的数据框是一行一行的。# 嵌套列表创建list2 = [['Jane',15,101],['David',18,103],['Peter',16,102]]df1 = pd.DataFrame(list2)df1

结果:

image

以上创建数据框都没有指定索引,下面我们来指定行列索引,columns指定列索引,index指定行索引。

# 指定行列索引list2 = [['Jane',15,101],['David',18,103],['Peter',16,102]]df1 = pd.DataFrame(list2,index = [1,2,3],columns = ['name','age','num'])df1

结果:

image

2.查

查是指对数据框行/列数据的访问2.1 选择行

Excel里没有专门的选择行的方法,就是直接用鼠标选择。在Pandas里要选择一行或几行数据,可以用loc或iloc方法,区别在于,loc方法传入的是行所在索引的名称,而iloc方法传入的是行的绝对位置。选择一行

选择df1数据框的第二行,可以用df1.loc[2],这里的2是第二行对应的行索引的名称。# 访问df1第二行df1.loc[2]

结果:

image

若用iloc方法,则这样写df1.iloc[1],别忘了一直说的索引是从0开始递增,所以第二行的绝对位置是1,iloc[1]表示取第二行的值。

df1.iloc[1]

结果同loc是一样的选择几行

要选择几行,可以用iloc选择绝对位置并切片的方法。# 选择前2行df1.iloc[:2]

结果:

image

若选择的不是连续的几行,就不用切片,iloc方法传入选择行的绝对位置,loc传入索引名称,并用列表括起来。

# 选择第一行和第三行df1.iloc[[0,2]]df1.loc[[1,3]]

结果:

image.png2.2 选择列

在Excel里选择列也是鼠标直接操作,除非是进行条件筛选,这个就是后话了,pandas里选择列的方式很简单,直接按列名选择即可,在数据框后面用中括号加上要选择的列名,或者数据框后面.列名,二者任选。数据框[列名]数据框.列名选择一列

df.列名 等价于 Df[列名]# 选择name列df1['name']df1.name

结果:

image.png

注意到这样选择列得到的是序列而非数据框,如果想要得到数据框,要再加中括号。

image.png选择几列

同行选择一样,选择几列的时候,要用中括号括起来。

# 选择1、3列df1[['name','num']]

结果:

image.png2.2 行列同时选择定位Loc定位

df.loc[行索引,列索引]可以定位一个数据.# loc定位df1.loc[[1,3],['name','age']]

结果:

image.png

[1,3]是行索引,是一个列表值,表示获取1、3行标签所在的行,[“name”,”age”]是列索引,表示获取name,age列索引所在的列。

还可以用切片获取全部的行

# 获取name num列的全部行df1.loc[:,['name','num']]

结果:

image.png

左边的冒号表示获取全部的行,右边的列表值表示获取name列和num列。

同理获取全部列# 获取2\3行全部列df1.loc[[2,3],:]

结果:

image.png

:号不仅可以用来表示全部的行/列,还可以用在行/列中,进行切片。

# 获取1~3行全部列df1.loc[1:3,:]

结果:

image.pngiloc定位

按照元素的绝对位置定位,行列索引都是从0开始。对比loc方法,loc里的1,3是行索引的名称,而iloc里的0,2是1、3这两个行索引所处的位置,同样地,name和age列的位置是0,1.# loc定位df1.loc[[1,3],['name','age']]# ilocdf1.iloc[[0,2],[0,1]] # iloc方法

image.png

iloc也可以切片。

# 获取name num列的全部行df1.loc[:,['name','num']]df1.iloc[:,[0,2]] #iloc方法

结果:

image.png# 获取2\3行全部列df1.loc[[2,3],:]df1.iloc[[1,2],:] #iloc方法

结果:

image.png

# 获取1~3行全部列df1.loc[1:3,:]df1.iloc[0:3,:] # iloc方法

结果:

image.png

Iloc切片是左闭右开的,也就是右区间时不包含的,0:3的意思是取第1行至第四行的值,不包括第四行,那实际上就只取到了第三行。Iloc切片的规则同Series切片是一样的。

3.增3.1 插入行

同序列一样,如果想要在DataFrame里增加行记录,做法是建立一个新的DataFrame,然后将两个DataFrame纵向合并起来,同样用到append方法,# 追加行df2 = pd.DataFrame({'name':['Jane'],'age':[16],'sex':['female']})df_d.append(df2,ignore_index = True)

结果:

image.png

除了append方法可以进行表的纵向合并以达到插入行记录的目的外,还有concat方法。Concat是基于pandas的方法,用列表框起来,表示将两个数据框纵向拼接。这里我们可以看到索引还是原来数据框的索引,可以重置索引,设置ignore_index = True,就新生成一个索引了,append里也可以用。

pd.concat([df_d,df2],ignore_index = True)

结果是一样的:

image.png3.2 插入列

直接对新增的列赋值,新增的列在数据框末尾。新增score列,用列表赋值,这里df1[“score”]不能替换成df1.score。# 插入列df1['score'] = [85,58,99]df1

结果:

image.png

Insert方法,可以指定新增列的位置。

df1.insert(1,'score2',[77,78,79])df1

结果:

image.png

insert方法的第一个参数是要插入列的位置,1表示将新列插入在第二列,第二个参数是列名,这里是score2,第三个参数是值。

3.删3.1 删除行

Drop方法,index指定行,index = 1的意思是删除行索引名称为1的这一行。# 删除行df1.drop(index = 1)

结果:

image.png

还可以不写index,写axis = 0,表示按行删除。

df1.drop(1,axis = 0)

结果是一样的3.2 删除列

对应删除行的操作,可以传入columns指定列# 删除列df1.drop(columns = 'num')

结果:

image.png

也可以不传入columns,但要传入axis = 1参数。

df1.drop('num',axis = 1)

4.改

数据框修改实际上就是数据框中数值的替换,用replace方法,replace(A,B),表示把A替换成B。选中age列,将age列中15的值替换为25,输出df1,并设置inplace = True参数,表示立即更新。# 一对一替换df1['age'].replace(15,25,inplace = True)df1

结果:

image.png

上个例子是将1个值替换成另一个值,那如果是要把18和16替换成26呢?把16和18用列表框起来,用26去替换他们。

# 多对一替换df1['age'].replace([18,16],26,inplace = True)df1

结果:

image.png

再比如要将num列的101,102,103分别对应替换成1001,1002和1003呢?这时字典就派上用场了。# 多对多替换df1['num'].replace({101:1001,102:1002,103:1003},inplace = True)df1

结果:

image.png

python 数据结构包括三方面_Python数据结构:数据框相关推荐

  1. python 数据结构包括三方面_python数据结构

    python数据结构 背景 之所以选择这个话题,有两方面原因: 很多情况下,有些语句是看到别人这么用,自己就这么用,并不知道为什么要这么用 写了一段代码,很简洁很美观,跑起来比驴还慢 只有知道内部原理 ...

  2. 硬核资源!Redis 五种数据结构以及三种高级数据结构解析(详解)

    上一篇分享的是<深入理解JVM>,这篇给大家分享<Redis 五种数据结构以及三种高级数据结构解析>. 前言 在 Redis 最重要最基础就属 它丰富的数据结构了,Redis ...

  3. 笨办法学 Python · 续 第三部分:数据结构

    第三部分:数据结构 原文:Part III: Data Structures 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你正在以你的方式构建个人流程,它让你以有限的阻碍快速 ...

  4. python建立数据库并序列化_Python之数据序列化(json、pickle、shelve)

    一.python类型数据和JSON数据格式互相转换 pthon 中str类型到JSON中转为unicode类型,None转为null,dict对应object 二. 序列化/反序列化 将对象转换为可通 ...

  5. python excel数据框_python – 熊猫数据框到Excel表

    根据您的上述需求,您将需要使用 Python(导出熊猫数据框)和VBA(删除现有工作表内容并复制/粘贴外部数据). 使用Python:使用to_csv或to_excel方法.我推荐使用更大的数据集更好 ...

  6. python怎么输入三引号_python三引号如何输入

    python三引号如何输入,注释,字符,引号,单引号,双引号 python三引号如何输入 易采站长站,站长之家为您整理了python三引号如何输入的相关内容. Python中的三引号,3个单引号及3个 ...

  7. python如何输入三引号_python三引号如何输入

    python三引号如何输入 Python中的三引号,3个单引号及3个双引号 实际上3个单引号和3个双引号不经常用,但是在某些特殊格式的字符串下却有大用处.通常情况下我们用单引号或者双引号定义一个字符 ...

  8. python更改数据框指定位置的数据_python – 更改数据框中多个loc的最快方法

    我有一个包含100万行的pandas数据帧.我想用另一组值替换列中900,000行的值.有没有for循环(我需要两天才能完成)的快速方法吗? 例如,查看此示例数据框,其中我已将100万行压缩为8行 i ...

  9. python更改数据框指定位置的数据_python – 移动数据框列并更改列顺序

    我有一个名为df的数据框,其中包含以下列数据标题: date A B C D E F G H I 07/03/2016 2.08 1 NaN NaN 1029 2 2.65 4861688 -0.03 ...

  10. 型数据保留几位小数_Python数据分析—数据框的简单操作

    本文是数据分析的第三课,教大家如何在python中对数据框进行简单操作,包括更改列名.显示某列中的部分字符.对某列的数值型数据进行取整等. 本文目录 更改列名 显示某列中的部分字符 抽取某列的部分字符 ...

最新文章

  1. ASP.NET 3.5之屠龙刀
  2. JADAK收购RFID方案商SkyeTek,增强竞争力
  3. P2502 [HAOI2006]旅行
  4. 文巾解题 1556. 千位分隔数
  5. QD75运动模块使用
  6. java break的用法_Java基础break、continue语句的用法
  7. php李捷,【问题解答】蝶泳手外划的作用
  8. How to install VNC on Ubuntu
  9. php文件流播放拖动,自定义实现可以播放暂停、进度拖拽、音量控制及全屏的H5播放器...
  10. 【通信总线】CAN 总线简介及应用
  11. 【方向盘】使用IDEA的60+个快捷键分享给你,权为了提效(运行/调试篇)
  12. es管理器免root_re管理器和es管理器哪个好
  13. 浅述SaaS、CRM、OA、ERP、HR、进销存、财务系统的区别
  14. 还原故事的真相:少年派毫不奇幻的残酷漂流
  15. amigo幸运字符什么意思_OMG,12 个精致的 Java 字符串操作小技巧,学它
  16. c语言求等差数列的和oj,华为oj之等差数列前n项和
  17. 关于Qt各个版本的下载地址
  18. 数据库学习之num1
  19. ERD Commander 2005 Boot CD 剖析及汉化试验
  20. C语言校验 checksum

热门文章

  1. 详解Guitar Pro 7导入吉他谱的步骤
  2. Webx系列之Ajax请求的四种方式
  3. python PIL库的getdata()函数
  4. java初学者代码练习题
  5. 数学节 | 最受读者喜爱的十大图灵数学好书
  6. cxf 本地wsdl_CXF wsdl2java 详解及常见问题
  7. 富士施乐s2110多vlan共享问题
  8. 计算机视觉相关专业的JCR一区期刊
  9. 短视频标题自动生成工具,助你打造爆款标题
  10. 超轻量级Web安全漏洞扫描工具Netsparker使用教程介绍