pandas最重要的一个功能是,它可以对不同索引的对象进行算数运算。在对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。

Series

  1. s1=Series([7.3,-,3.4,1.5],index=['a','c','d','e'])
  2. s2=Series([-2.1,3.6,-1.5,,3.1],index=['a','c','e','f','g'])
  3.  
  4. s1
  5. Out[]:
  6. a 7.3
  7. c -25.0
  8. d 3.4
  9. e 1.5
  10. dtype: float64
  11.  
  12. s2
  13. Out[]:
  14. a -2.1
  15. c 3.6
  16. e -1.5
  17. f 4.0
  18. g 3.1
  19. dtype: float64

它们相加就会产生:

  1. s1+s2
  2. Out[]:
  3. a 5.2
  4. c -21.4
  5. d NaN
  6. e 0.0
  7. f NaN
  8. g NaN
  9. dtype: float64

自动的数据对齐操作在不重叠的索引处引入了NA值。

DataFrame

对齐操作会同时发生在行和列上:

  1. df1=DataFrame(np.arange().reshape((,)),columns=list('bcd'),
  2. index=['Ohio','Texas','Colorado'])
  3.  
  4. df2=DataFrame(np.arange().reshape((,)),columns=list('bde'),
  5. index=['Utah','Ohio','Texas','Oregon'])
  6.  
  7. df1
  8. Out[]:
  9. b c d
  10. Ohio
  11. Texas
  12. Colorado
  13.  
  14. df2
  15. Out[]:
  16. b d e
  17. Utah
  18. Ohio
  19. Texas
  20. Oregon

把它们相加后会返回一个新的DataFrame,其索引和列为原来那两个DataFrame的并集:

  1. df1+df2
  2. Out[]:
  3. b c d e
  4. Colorado NaN NaN NaN NaN
  5. Ohio 3.0 NaN 6.0 NaN
  6. Oregon NaN NaN NaN NaN
  7. Texas 9.0 NaN 12.0 NaN
  8. Utah NaN NaN NaN NaN
在算数方法中填充值
在对不同索引的对象进行算数运算时,你可能希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值:
  1. df1=DataFrame(np.arange().reshape((,)),columns=list('abcd'))
  2.  
  3. df2=DataFrame(np.arange().reshape((,)),columns=list('abcde'))
  4.  
  5. df1
  6. Out[]:
  7. a b c d
  8.  
  9. df2
  10. Out[]:
  11. a b c d e

将它们相加时,没有重叠的位置就会产生NA值:

  1. df1+df2
  2. Out[]:
  3. a b c d e
  4. 0.0 2.0 4.0 6.0 NaN
  5. 9.0 11.0 13.0 15.0 NaN
  6. 18.0 20.0 22.0 24.0 NaN
  7. NaN NaN NaN NaN NaN

使用df1的add方法,传入df2以及一个fill_value参数:

  1. df1.add(df2,fill_value=)
  2. Out[]:
  3. a b c d e
  4. 0.0 2.0 4.0 6.0 4.0
  5. 9.0 11.0 13.0 15.0 9.0
  6. 18.0 20.0 22.0 24.0 14.0
  7. 15.0 16.0 17.0 18.0 19.0

与此类似,在对Series或DataFrame重新索引时,也可以指定一个填充值:

  1. df1.reindex(columns=df2.columns,fill_value=)
  2. Out[]:
  3. a b c d e
灵活的算数方法
add ->用于加法(+)的方法
sub ->用于减法(-)的方法
div ->用于除法(/)的方法
mul ->用于乘法(*)的方法

DataFrame和Series之间的运算

  1. arr=np.arange().reshape((,))
  2.  
  3. arr
  4. Out[]:
  5. array([[ , , , ],
  6. [ , , , ],
  7. [ , , , ]])
  8.  
  9. arr[]
  10. Out[]: array([, , , ])
  11.  
  12. arr-arr[]
  13. Out[]:
  14. array([[, , , ],
  15. [, , , ],
  16. [, , , ]])

这就叫做广播(broadcasting)。DataFrame和Series之间的运算差不多如此:

  1. frame=DataFrame(np.arange().reshape((,)),columns=list('bde'),
  2. index=['Utah','Ohio','Texas','Oregon'])
  3.  
  4. series=frame.ix[]
  5. __main__:: DeprecationWarning:
  6. .ix is deprecated. Please use
  7. .loc for label based indexing or
  8. .iloc for positional indexing
  9.  
  10. See the documentation here:
  11. http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
  12.  
  13. frame
  14. Out[]:
  15. b d e
  16. Utah
  17. Ohio
  18. Texas
  19. Oregon
  20.  
  21. series
  22. Out[]:
  23. b
  24. d
  25. e
  26. Name: Utah, dtype: int32
匹配列,沿行进行广播
默认情况下,DataFrame和Series之间的算数运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。
  1. frame-series
  2. Out[]:
  3. b d e
  4. Utah
  5. Ohio
  6. Texas
  7. Oregon

也可以理解为纵向广播↓。

如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集:

  1. series2=Series(range(),index=['b','e','f'])
  2.  
  3. frame+series2
  4. Out[]:
  5. b d e f
  6. Utah 0.0 NaN 3.0 NaN
  7. Ohio 3.0 NaN 6.0 NaN
  8. Texas 6.0 NaN 9.0 NaN
  9. Oregon 9.0 NaN 12.0 NaN
 
匹配行在列上广播
则必须使用算数运算方法:
  1. series3=frame['d']
  2.  
  3. frame
  4. Out[]:
  5. b d e
  6. Utah
  7. Ohio
  8. Texas
  9. Oregon
  10.  
  11. series3
  12. Out[]:
  13. Utah
  14. Ohio
  15. Texas
  16. Oregon
  17. Name: d, dtype: int32
  18.  
  19. frame.sub(series3,axis=)
  20. Out[]:
  21. b d e
  22. Utah -
  23. Ohio -
  24. Texas -
  25. Oregon -

传入的轴号就是希望匹配的轴。

可以理解为横向广播 →

pandas读书笔记 算数运算和数据对齐的更多相关文章

  1. Shell学习笔记——算数运算与条件测试

    算数运算 1. 使用let命令 #!/sbin/bash var1=2 var2=3 let sum=var1+var2 echo $sum 使用let命令式,变量前不需要加$号 只用于整数运算,不适 ...

  2. 《利用python进行数据分析》读书笔记--第七章 数据规整化:清理、转换、合并、重塑(三)

    http://www.cnblogs.com/batteryhp/p/5046433.html 5.示例:usda食品数据库 下面是一个具体的例子,书中最重要的就是例子. #-*- encoding: ...

  3. 《利用python进行数据分析》读书笔记--第六章 数据加载、存储与文件格式

    http://www.cnblogs.com/batteryhp/p/5021858.html 输入输出一般分为下面几类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据.利用Web API ...

  4. 《统计推断(Statistical Inference)》读书笔记——第6章 数据简化原理

    在外行眼里统计学家经常做的一件事就是把一大堆杂七杂八的数据放在一起,算出几个莫名其妙的数字,然后再通过这些数字推理出貌似很靠谱的结论,简直就像是炼金术士用“贤者之石”把一堆石头炼成了金矿.第六章,应该 ...

  5. 《SQL Server企业级平台管理实践》读书笔记——SQL Server中数据文件空间使用与管理

    1.表和索引存储结构 在SQL Server2005以前,一个表格是以一个B树或者一个堆(heap)存放的.每个B树或者堆,在sysindexes里面都有一条记录相对应.SQL Server2005以 ...

  6. OCA读书笔记(10) - 管理UNDO数据

    Undo自动管理与手动管理 undo段自动管理SQL> show parameter undo_management 将undo段改为手工管理SQL> alter system set u ...

  7. MySQL必知必会 读书笔记三:检索数据和数据排序

    检索数据 SELECT语句 它的用途是从一个或多个表中检索信息. 为了使用SELECT检索表数据,必须至少给出两条信息--想选择什 么,以及从什么地方选择. 检索单个列 SELECT col_1 FR ...

  8. $《第一行代码:Android》读书笔记——第6章 数据持久化

    主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...

  9. 3D数学读书笔记——向量运算及在c++上的实现

     本系列文章由birdlove1987编写.转载请注明出处.     文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661   ...

随机推荐

  1. C#5.0 异步编程 Async和Await--介绍

    C#5.0引入async和await关键字实现方法的异步调用. 直接进入正题. async只是一个标识符,并没有实际的用途,只是用于表明某个方法是异步方法,在方法前面加上async 表示该方法为一个异 ...

  2. ubuntu 下 使用 Git 维护 linux kernel版本

    学习linux内核一段时间,意识到内核的版本需要严格控制.利用Git工具可以很轻松的完成不同开发人员不同模块之间的代码融合与版本控制 . 1. 首先,安装Git .可以参考廖雪峰的博客  https: ...

  3. Thunar 右键菜单等自定义

    Thunar 右键菜单等自定义 可以使用图形界面或者直接编辑配置文件,二者是等价的. 图形界面: 以给"zip,rar,7z"等文件添加"在此位置使用unar解压缩&qu ...

  4. [网络流24题] 洛谷P2761 软件补丁问题

    题意:某公司发现其研制的一个软件中有 n个错误,随即为该软件发放了一批共 m 个补丁程序.对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i)和 B2(i),使得仅当软件包含 B1(i)中 ...

  5. java中this和super关键字的作用

    this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题:this可以调用成员变量,不能调用局部变量:this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省 ...

  6. git的使用(扫盲)

    之前一直是通过图形化工具使用git,前两天练习用命令上传代码,遇到不少问题,最终还是解决了,在这里总结一下. 通过一个例子来演示一下.首先去github上面创建一个仓库. 创建好之后,就可以上传文件了 ...

  7. 【Movist Pro】macOS上的绝佳媒体播放器

    Movist Pro是适用于Mac的高性能电影播放器,如果比较流程和界面,则Movist与QuickTime非常相似.因此,采用播放器几乎不会有任何问题.使用Quicktime或FFmpeg解码电影并 ...

  8. LInux多线程编程----线程特定数据的处理函数

    1.pthread_key_t和pthread_key_create() 线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了?大家都知道,在多线程程 ...

  9. css 导航样式

    html  结构 <div class="nav-menu float-r"> <ul class="menu-item"> <l ...

  10. 杂项-.Net-HQL:HQL

    ylbtech-杂项-.Net-HQL:HQL HQL是Hibernate Query Language的缩写,提供更加丰富灵活.更为强大的查询能力:HQL更接近SQL语句查询语法. 1.返回顶部 1 ...