pandas对齐运算的实现示例
目录
- 1.算术运算和数据对齐
- 1.1 Series
- 1.2 DataFrame
- 2.使用填充值的算术方法
- 2.1 Series
- 2.2 DataFrame
- 3.DataFrame和Series混合运算
- 3.1 按行广播
- 3.2 按列广播
1.算术运算和数据对齐
import numpy as npimport pandas as pd
1.1 Series
a1 = pd.Series(np.arange(4),index=['a','b','c','d'])a2 = pd.Series(np.arange(5),index=['a','r','c','u','k'])print(a1)print("="*20)print(a2)
a0有相同的索引值相加后结果变为浮点数,不相同则返回NAN值。
b1
c2
d3
dtype: int32
====================
a0
r1
c2
u3
k4
dtype: int32
a1 + a2
a0.0
bNaN
c4.0
dNaN
kNaN
rNaN
uNaN
dtype: float64
1.2 DataFrame
a3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['q','w','e','r'])a4 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','u','c'],columns=['m','e','r'])print(a3)print("="*20)print(a4)
qwer只有行和列索引都相同的才能运算,否则返回NAN值
a0123
b4567
c891011
====================
mer
a012
u345
c678
a3 + a4
emqrw
a 3.0NaN NaN5.0 NaN
b NaNNaN NaNNaN NaN
c 17.0NaN NaN19.0 NaN
u NaNNaN NaNNaN NaN
2.使用填充值的算术方法
2.1 Series
a1 = pd.Series(np.arange(4),index=['a','b','c','d'])a2 = pd.Series(np.arange(5),index=['a','r','c','u','k'])print(a1)print("="*20)print(a2)print("="*20)print(a1 + a2)#有相同的索引值相加后结果变为浮点数,不相同索引值相加则返回NAN
a0使用填充值,不会返回NAN值,如果a1,a2的索引值相同则将对应的值作算术运算,如果不同则作为一行新的数据,形成一个新的Series索引
b1
c2
d3
dtype: int32
====================
a0
r1
c2
u3
k4
dtype: int32
====================
a0.0
bNaN
c4.0
dNaN
kNaN
rNaN
uNaN
dtype: float64
a1.add(a2,fill_value=https://www.it610.com/article/0)#a1+a2 忽略NAN影响
a0.0
b1.0
c4.0
d3.0
k4.0
r1.0
u3.0
dtype: float64
2.2 DataFrame
a3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['q','w','e','r'])a4 = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','u','c'],columns=['m','e','r'])print(a3)print("="*20)print(a4)print("="*20)print(a3 + a4)#只有行索引和列索引都相同的才能运算,否则返回NAN
qwer只有当两个DataFrame索引独有的行和列独有的索引对应的值才返回NAN,例如下面的 b行m列返回NAN值,其索引值是由a3独有的b和a4独有的m组成的,行和列其中之一的索引值不是独有的,则返回对应DataFrame中的值,例如a行q列中的是a3,a4都有的,返回a3中 a行q列对应的值。
a0123
b4567
c891011
====================
mer
a012
u345
c678
====================
emqrw
a3.0NaNNaN5.0NaN
bNaNNaNNaNNaNNaN
c17.0NaNNaN19.0NaN
uNaNNaNNaNNaNNaN
#使用填充值,a3.add(a4,fill_value=https://www.it610.com/article/0)
emqrwr 开头字母表示会翻转参数
a 3.00.00.0 5.01.0
b 6.0NaN4.0 7.05.0
c 17.06.08.0 19.09.0
u 4.03.0NaN 5.0NaN
1/a3
q w e r
a inf 1.000000 0.500000 0.333333
b 0.250 0.200000 0.166667 0.142857
c 0.125 0.111111 0.100000 0.090909
a3.rdiv(1)#翻转div(除法),结果等同 1/a3
q w e rreindex指定索引和缺失值
a inf 1.000000 0.500000 0.333333
b 0.250 0.200000 0.166667 0.142857
c 0.125 0.111111 0.100000 0.090909
将a3的列索引替换为a4的列索引 ,如果索引名字不相同,则返回NAN(不改变原DataFrame索引)
a3.reindex(columns=a4.columns))
m e r
a NaN 2 3
b NaN 6 7
c NaN 10 11
#对NAN进行填充a3.reindex(columns=a4.columns,fill_value=https://www.it610.com/article/66)#把所有的NAN替换为66(可指定任意值)
m e r
a 66 2 3
b 66 6 7
c 66 10 11
3.DataFrame和Series混合运算
3.1 按行广播
arr = np.arange(12).reshape(3,4)arr
array([[ 0,1,2,3],取出第一行
[ 4,5,6,7],
[ 8,9, 10, 11]])
arr[0] #取出第一行
array([0, 1, 2, 3])每一行都减去第一行(按行进行广播)
arr - arr[0] #每一行都减去第一行(按行进行广播)
array([[0, 0, 0, 0],
[4, 4, 4, 4],
[8, 8, 8, 8]])
a3 = pd.DataFrame(np.arange(12).reshape(3,4),index=['a','b','c'],columns=['q','w','e','r'])a3
q w e r位置索引 iloc[m,n] 第一个参数m表示行,第二个参数n表示列
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
s1 = a3.iloc[0]#取出第一行s1
q0每一行都减去第一行(按行进行广播)
w1
e2
r3
Name: a, dtype: int32
a3-s1#每一行都减去第一行(按行进行广播)
q w e r
a 0 0 0 0
b 4 4 4 4
c 8 8 8 8
3.2 按列广播
取出q这一列
s2 = a3['q']#取出q这一列s2
a0默认是行axis=1,指定axis='index'或axis=0,按列进行广播(a3所有列分别减去第q列)
b4
c8
Name: q, dtype: int32
a3.sub(s2,axis='index')#默认是行axis=1,指定axis='index'(或axis=0),按列进行广播(a3所有列分别减去第q列)
q w e r
a 0 1 2 3
b 0 1 2 3
c 0 1 2 3
a3.sub(s2,axis=0)#默认是行axis=1,指定axis=0(或)axis='index',按列进行广播(a3所有列分别减去第q列)
q w e r
a 0 1 2 3
b 0 1 2 3
c 0 1 2 3
a3.sub(s2)#默认情况 axis=1
a b c e q r w【pandas对齐运算的实现示例】到此这篇关于pandas对齐运算的实现示例的文章就介绍到这了,更多相关pandas对齐运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
a NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN
推荐阅读
- Shell-Bash变量与运算符
- iOS内存对齐原则
- Lesson11——NumPy|Lesson11——NumPy 位运算
- 二、Dart基础语法|二、Dart基础语法 (二)运算符 类
- Pandas(数据清洗)
- pandas使用
- JavaScript其他运算符
- 什么是内存对齐,原理你真的了解吗()
- Pandas批量读取csv文件数据存入到Mysql中
- 用Pandas库实现MySQL数据库的读写