这篇文章主要讲解了“怎么实现pandas对齐运算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现pandas对齐运算”吧!
import numpy as np import pandas as pd
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)
a 0
b 1
c 2
d 3
dtype: int32
====================
a 0
r 1
c 2
u 3
k 4
dtype: int32
有相同的索引值相加后结果变为浮点数,不相同则返回NAN值。
a1 + a2
a 0.0
b NaN
c 4.0
d NaN
k NaN
r NaN
u NaN
dtype: float64
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)
q w e r
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
====================
m e r
a 0 1 2
u 3 4 5
c 6 7 8
只有行和列索引都相同的才能运算,否则返回NAN值
a3 + a4
e m q r w
a 3.0 NaN NaN 5.0 NaN
b NaN NaN NaN NaN NaN
c 17.0 NaN NaN 19.0 NaN
u NaN NaN NaN NaN NaN
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
a 0
b 1
c 2
d 3
dtype: int32
====================
a 0
r 1
c 2
u 3
k 4
dtype: int32
====================
a 0.0
b NaN
c 4.0
d NaN
k NaN
r NaN
u NaN
dtype: float64
使用填充值,不会返回NAN值,如果a1,a2的索引值相同则将对应的值作算术运算,如果不同则作为一行新的数据,形成一个新的Series索引
a1.add(a2,fill_value=0) #a1+a2 忽略NAN影响
a 0.0
b 1.0
c 4.0
d 3.0
k 4.0
r 1.0
u 3.0
dtype: float64
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
q w e r
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
====================
m e r
a 0 1 2
u 3 4 5
c 6 7 8
====================
e m q r w
a 3.0 NaN NaN 5.0 NaN
b NaN NaN NaN NaN NaN
c 17.0 NaN NaN 19.0 NaN
u NaN NaN NaN NaN NaN
只有当两个DataFrame索引独有的行和列独有的索引对应的值才返回NAN,例如下面的 b行m列返回NAN值,其索引值是由a3独有的b和a4独有的m组成的,行和列其中之一的索引值不是独有的,则返回对应DataFrame中的值,例如a行q列中的是a3,a4都有的,返回a3中 a行q列对应的值。
#使用填充值, a3.add(a4,fill_value=0)
e m q r w
a 3.0 0.0 0.0 5.0 1.0
b 6.0 NaN 4.0 7.0 5.0
c 17.0 6.0 8.0 19.0 9.0
u 4.0 3.0 NaN 5.0 NaN
r 开头字母表示会翻转参数
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 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
reindex指定索引和缺失值
将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=66) #把所有的NAN替换为66(可指定任意值)
m e r
a 66 2 3
b 66 6 7
c 66 10 11
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
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
位置索引 iloc[m,n] 第一个参数m表示行,第二个参数n表示列
s1 = a3.iloc[0] #取出第一行 s1
q 0
w 1
e 2
r 3
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
取出q这一列
s2 = a3['q'] #取出q这一列 s2
a 0
b 4
c 8
Name: q, dtype: int32
默认是行axis=1,指定axis='index'或axis=0,按列进行广播(a3所有列分别减去第q列)
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
a NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN
感谢各位的阅读,以上就是“怎么实现pandas对齐运算”的内容了,经过本文的学习后,相信大家对怎么实现pandas对齐运算这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。