遍历是众多编程语言中必备的一种操作,比如 Python 语言通过 for 循环来遍历列表结构。那么 Pandas 是如何遍历 Series 和 DataFrame 结构呢?我们应该明确,它们的数据结构类型不同的,遍历的方法必然会存在差异。对于 Series 而言,您可以把它当做一维数组进行遍历操作;而像 DataFrame 这种二维数据表结构,则类似于遍历 Python 字典。

在 Pandas 中同样也是使用 for 循环进行遍历。通过for遍历后,Series 可直接获取相应的 value,而 DataFrame 则会获取列标签。示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. N=20
  4. df = pd.DataFrame({
  5. 'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
  6. 'x': np.linspace(0,stop=N-1,num=N),
  7. 'y': np.random.rand(N),
  8. 'C': np.random.choice(['Low','Medium','High'],N).tolist(),
  9. 'D': np.random.normal(100, 10, size=(N)).tolist()
  10. })
  11. print(df)
  12. for col in df:
  13. print (col)

输出结果:

A
x
y
C
D

内置迭代方法

如果想要遍历 DataFrame 的每一行,我们下列函数:

  • 1) iteritems():以键值对 (key,value) 的形式遍历;
  • 2) iterrows():以 (row_index,row) 的形式遍历行;
  • 3) itertuples():使用已命名元组的方式对行遍历。

下面对上述函数做简单的介绍:

1) iteritems()

以键值对的形式遍历 DataFrame 对象,以列标签为键,以对应列的元素为值。

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
  4. for key,value in df.iteritems():
  5. print (key,value)

输出结果:

col1
0 0.561693
1 0.537196
2 0.882564
3 1.063245
Name: col1, dtype: float64
col2
0 -0.115913
1 -0.526211
2 -1.232818
3 -0.313741
Name: col2, dtype: float64
col3
0 0.103138
1 -0.655187
2 -0.101757
3 1.505089
Name: col3, dtype: float64

2) iterrows()

该方法按行遍历,返回一个迭代器,以行索引标签为键,以每一行数据为值。示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.DataFrame(np.random.randn(3,3),columns = ['col1','col2','col3'])
  4. print(df)
  5. for row_index,row in df.iterrows():
  6. print (row_index,row)

输出结果:

       col1      col2      col3
0 -0.319301 0.205636 0.247029
1 0.673788 0.874376 1.286151
2 0.853439 0.543066 -1.759512 0
col1 -0.319301
col2 0.205636
col3 0.247029
Name: 0, dtype: float64
1
col1 0.673788
col2 0.874376
col3 1.286151
Name: 1, dtype: float64
2
col1 0.853439
col2 0.543066
col3 -1.759512
Name: 2, dtype: float64

注意:iterrows() 遍历行,其中 0,1,2 是行索引而 col1,col2,col3 是列索引。

3) itertuples

itertuples() 同样将返回一个迭代器,该方法会把 DataFrame 的每一行生成一个元组,示例如下:

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.DataFrame(np.random.rand(3,3),columns = ['c1','c2','c3'])
  4. for row in df.itertuples():
  5. print(row)

输出结果:

Pandas(Index=0, c1=0.253902385555437, c2=0.9846386610838339, c3=0.8814786409138894)
Pandas(Index=1, c1=0.018667367298908943, c2=0.5954745800963542, c3=0.04614488622991075)
Pandas(Index=2, c1=0.3066297875412092, c2=0.17984210928723543, c3=0.8573031941082285)

迭代返回副本

迭代器返回的是原对象的副本,所以,如果在迭代过程中修改元素值,不会影响原对象,这一点需要大家注意。

看一组简单的示例:

  1. import pandas as pd
  2. import numpy as np
  3. df = pd.DataFrame(np.random.randn(3,3),columns = ['col1','col2','col3'])
  4. for index, row in df.iterrows():
  5. row['a'] = 15
  6. print (df)

输出结果:

       col1      col2      col3
0 1.601068 -0.098414 -1.744270
1 -0.432969 -0.233424 0.340330
2 -0.062910 1.413592 0.066311

由上述示例可见,原对象df没有受到任何影响。

pandas之iteration遍历的更多相关文章

  1. Pandas 中的遍历与并行处理

    使用 pandas 处理数据时,遍历和并行处理是比较常见的操作了本文总结了几种不同样式的操作和并行处理方法. 1. 准备示例数据 import pandas as pd import numpy as ...

  2. pandas中的遍历方式速度对比

    对一个20667行的xlsx文件进行遍历测试 import pandas as pd # 定义一个计算执行时间的函数作装饰器,传入参数为装饰的函数或方法 def print_execute_time( ...

  3. pandas的札记

    导入导出数据 在导入,导出DataFrame数据时,会用到各种格式,分为 to_csv ;to_excel;to_hdf;to_sql;to_json;to_msgpack ;to_html;to_g ...

  4. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

  5. doT.js——前端javascript模板引擎问题备忘录

    我手里维护的一个项目,遇到一个问题:原项目的开发人员在Javascript中,大量的拼接HTML,导致代码极丑,极难维护.他们怎么能够忍受的了这么丑陋.拙劣的代码呢,也许是他们的忍受力极强,压根就没想 ...

  6. python笔记:#013#高级变量类型

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

  7. java代码之美(5)---guava之Multiset

    guava之Multiset 一.概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接 ...

  8. python基础自学 第五天(附带视频和相关资源)

    数据类型 01.列表 List 是 python 中使用最频繁的数据类型,在其他语言中叫做数组 专门用于存储一串信息 列表用 [ ] 定义,数据之间用 , 分隔 列表的索引从 0 开始 补:索引就是数 ...

  9. Python中的高级变量类型

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

  10. Python中高级变量类型(列表,元组,字典,字符串,公共方法...)

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

随机推荐

  1. 【xUtils框架问题】xUtils继承基类的x.view().inject(this)绑定点击事件@Event无效

    由于看得教程里的xUtils比较老了,不知道什么版本的. 还是使用ViewUtils.inject()进行绑定反射的,使用@OnClick进行点击监听绑定的. 3.9.0版本的xUtils使用: x. ...

  2. js获取当前日期的前七天,月份+日(数组)

    1.定义一个空对象. let dayArr = []: 2.时间格式化  function formatterDate(date,fmt){     let nowDate = {       yyy ...

  3. 20181224《网络攻防技术》Exp7 网络欺诈防范

    20181224<网络攻防技术>Exp7 网络欺诈防范 目录 20181224<网络攻防技术>Exp7 网络欺诈防范 相关知识点总结 ARP Spoofing IP源地址欺骗 ...

  4. mysql表操作2

    表介绍: 表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 创建表: #语法: create table 表名( 字段名1 类型[(宽度) 约束 ...

  5. Checkmarx

    1.概述 CheckMarx:是以色列的一家高科技软件公司,也是世界上最著名的源代码安全扫描软件CheckmarxCxSuite的生产商. Checkmarx CxEnterprise(Checkma ...

  6. vite设置跨域

    1. vite.config.ts或者vite.config.js文件 server: { port: 3001, host: '0.0.0.0', open: true, proxy: { // 代 ...

  7. Navicat 通过ssh链接远程数据库

    首先需要下载一个Navicat数据库管理工具,有了Navicat工具需要完成一下步骤就可以实现本地链接远程数据库了 一.打开Navicat,点击连接按钮,找到MySQL并点击 二.点击"常规 ...

  8. CV入坑

    https://www.cnblogs.com/fldev/p/14360149.html

  9. 115、商城业务---分布式事务---使用Springboot提供的Seata解决分布式事务

    https://seata.io/zh-cn/ seata使用Seata AT模式控制分布式事务的步骤: 1.每一个想控制分布式事务的服务对应的数据库都需要创建一个UNDO_LOG 表 CREATE ...

  10. GDB使用详解

    来源:GDB使用详解 - 知乎 (zhihu.com) 1. 概述 ​ GDB 全称"GNU symbolic debugger",从名称上不难看出,它诞生于 GNU 计划(同时诞 ...