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

Series

s1=Series([7.3,-,3.4,1.5],index=['a','c','d','e'])
s2=Series([-2.1,3.6,-1.5,,3.1],index=['a','c','e','f','g']) s1
Out[]:
a 7.3
c -25.0
d 3.4
e 1.5
dtype: float64 s2
Out[]:
a -2.1
c 3.6
e -1.5
f 4.0
g 3.1
dtype: float64

它们相加就会产生:

s1+s2
Out[]:
a 5.2
c -21.4
d NaN
e 0.0
f NaN
g NaN
dtype: float64

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

DataFrame

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

df1=DataFrame(np.arange().reshape((,)),columns=list('bcd'),
index=['Ohio','Texas','Colorado']) df2=DataFrame(np.arange().reshape((,)),columns=list('bde'),
index=['Utah','Ohio','Texas','Oregon']) df1
Out[]:
b c d
Ohio
Texas
Colorado df2
Out[]:
b d e
Utah
Ohio
Texas
Oregon

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

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

df2=DataFrame(np.arange().reshape((,)),columns=list('abcde'))

df1
Out[]:
a b c d df2
Out[]:
a b c d e

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

df1+df2
Out[]:
a b c d e
0.0 2.0 4.0 6.0 NaN
9.0 11.0 13.0 15.0 NaN
18.0 20.0 22.0 24.0 NaN
NaN NaN NaN NaN NaN

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

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

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

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

DataFrame和Series之间的运算

arr=np.arange().reshape((,))

arr
Out[]:
array([[ , , , ],
[ , , , ],
[ , , , ]]) arr[]
Out[]: array([, , , ]) arr-arr[]
Out[]:
array([[, , , ],
[, , , ],
[, , , ]])

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

frame=DataFrame(np.arange().reshape((,)),columns=list('bde'),
index=['Utah','Ohio','Texas','Oregon']) series=frame.ix[]
__main__:: DeprecationWarning:
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated frame
Out[]:
b d e
Utah
Ohio
Texas
Oregon series
Out[]:
b
d
e
Name: Utah, dtype: int32
匹配列,沿行进行广播
默认情况下,DataFrame和Series之间的算数运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。
frame-series
Out[]:
b d e
Utah
Ohio
Texas
Oregon

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

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

series2=Series(range(),index=['b','e','f'])

frame+series2
Out[]:
b d e f
Utah 0.0 NaN 3.0 NaN
Ohio 3.0 NaN 6.0 NaN
Texas 6.0 NaN 9.0 NaN
Oregon 9.0 NaN 12.0 NaN
 
匹配行在列上广播
则必须使用算数运算方法:
series3=frame['d']

frame
Out[]:
b d e
Utah
Ohio
Texas
Oregon series3
Out[]:
Utah
Ohio
Texas
Oregon
Name: d, dtype: int32 frame.sub(series3,axis=)
Out[]:
b d e
Utah -
Ohio -
Texas -
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. 4154: [Ipsc2015]Generating Synergy

    Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色 区间修改单点查询kdtree #include<iostre ...

  2. Debug模式的三种配置方法

    使用`app.config.from_object`的方式加载配置文件: 1. 导入`import config`.2. 使用`app.config.from_object(config)`. ### ...

  3. go strconv

    strconv是golang用来做数据类型转换的一个库. 介绍下strconv最常用的两个方法, 没有解释语言那么自在可以str(int),int(string), 那还算简练. num, err : ...

  4. Codeforces New Year and Arbitrary Arrangement

    New Year and Arbitrary Arrangement time limit per test2 seconds You are given three integers k, pa a ...

  5. 使用TPL取回Task中的运行结果的三种方式

    概念:TPL( Task Parallel Library) 任务并行库 使用Task类执行多线程操作要比直接使用自己手工创建Thread效率高很多. 默认情况下,TPL使用线程池中的线程执行Task ...

  6. 请求一个url的全过程

    最近在进行前端面试方面的一些准备,遇到了一个经典前端问题,一个url从输入到页面加载中间到底发生了什么,以前也认真想过这个问题,但是当时回答的都不全面,现在来好好总结一下: 总体来说分为以下六个步骤: ...

  7. hibernate调用oracle存储过程||函数

    pakeage dao.Impl; //调用函数FUN_GET(); public String get(String Id,String Name){ return getSession().cre ...

  8. PHP ftp_chdir() 函数

    定义和用法 ftp_chdir() 函数改变 FTP 服务器上的当前目录为指定目录. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE 和一个警告. 语法 ftp_chdir(ftp_co ...

  9. LOJ6485 LJJ 学二项式定理 解题报告

    LJJ 学二项式定理 题意 \(T\)组数据,每组给定\(n,s,a_0,a_1,a_2,a_3\),求 \[ \sum_{i=0}^n \binom{n}{i}s^ia_{i\bmod 4} \] ...

  10. Android 在OnCreate()中获取控件高度与宽度

    试过在OnCreate()中获取控件高度与宽度的童鞋都知道,getWidth()与getHeight()方法返回是0,具体原因 看一下Activity的生命周期 就会明白. 上代码: 方法一: int ...