pandas對齊運算的實現(xiàn)示例
1.算術(shù)運算和數(shù)據(jù)對齊
import numpy as np import 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)
a 0
b 1
c 2
d 3
dtype: int32
====================
a 0
r 1
c 2
u 3
k 4
dtype: int32
有相同的索引值相加后結(jié)果變?yōu)楦↑c數(shù),不相同則返回NAN值。
a1 + a2
a 0.0
b NaN
c 4.0
d NaN
k NaN
r NaN
u NaN
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)
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
a3.0 NaNNaN 5.0NaN
bNaN NaNNaN NaNNaN
c17.0 NaNNaN 19.0NaN
uNaN NaNNaN NaNNaN
2.使用填充值的算術(shù)方法
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) #有相同的索引值相加后結(jié)果變?yōu)楦↑c數(shù),不相同索引值相加則返回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的索引值相同則將對應(yīng)的值作算術(shù)運算,如果不同則作為一行新的數(shù)據(jù),形成一個新的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
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
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
只有當(dāng)兩個DataFrame索引獨有的行和列獨有的索引對應(yīng)的值才返回NAN,例如下面的 b行m列返回NAN值,其索引值是由a3獨有的b和a4獨有的m組成的,行和列其中之一的索引值不是獨有的,則返回對應(yīng)DataFrame中的值,例如a行q列中的是a3,a4都有的,返回a3中 a行q列對應(yīng)的值。
#使用填充值, a3.add(a4,fill_value=0)
e m q r w
a3.0 0.0 0.05.0 1.0
b6.0 NaN 4.07.0 5.0
c17.0 6.0 8.019.0 9.0
u4.0 3.0 NaN5.0 NaN
r 開頭字母表示會翻轉(zhuǎn)參數(shù)
1/a3
qwer
ainf1.0000000.5000000.333333
b0.2500.2000000.1666670.142857
c0.1250.1111110.1000000.090909
a3.rdiv(1)#翻轉(zhuǎn)div(除法),結(jié)果等同 1/a3
qwer
ainf1.0000000.5000000.333333
b0.2500.2000000.1666670.142857
c0.1250.1111110.1000000.090909
reindex指定索引和缺失值
將a3的列索引替換為a4的列索引 ,如果索引名字不相同,則返回NAN(不改變原DataFrame索引)
a3.reindex(columns=a4.columns))
mer
aNaN23
bNaN67
cNaN1011
#對NAN進行填充 a3.reindex(columns=a4.columns,fill_value=66) #把所有的NAN替換為66(可指定任意值)
mer
a6623
b6667
c661011
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
qwer
a0123
b4567
c891011
位置索引 iloc[m,n] 第一個參數(shù)m表示行,第二個參數(shù)n表示列
s1 = a3.iloc[0]#取出第一行 s1
q 0
w 1
e 2
r 3
Name: a, dtype: int32
每一行都減去第一行(按行進行廣播)
a3-s1 #每一行都減去第一行(按行進行廣播)
qwer
a0000
b4444
c8888
3.2 按列廣播
取出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列)
qwer
a0123
b0123
c0123
a3.sub(s2,axis=0) #默認是行axis=1,指定axis=0(或)axis='index',按列進行廣播(a3所有列分別減去第q列)
qwer
a0123
b0123
c0123
a3.sub(s2) #默認情況 axis=1
abceqrw
aNaNNaNNaNNaNNaNNaNNaN
bNaNNaNNaNNaNNaNNaNNaN
cNaNNaNNaNNaNNaNNaNNaN
到此這篇關(guān)于pandas對齊運算的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)pandas對齊運算內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。