pandas 的算術運算和資料對齊

2021-09-07 09:20:13 字數 3353 閱讀 3376

pandas 還有乙個重要的功能,就是他可以對不同索引的物件進行算數運算。

物件相加, 如果存在不同的索引對,則結果的索引就是該索引對的並集

先來個例子

in [33]: s1 = series([7.3, -2.5, 3.4, 1.5], index=['

a', '

c', '

d', 'e'

])in [34]: s2 = series([-2.1, 3.6, -1.5, 4, 3.1], index=['

a', '

c', '

e', '

f', 'g'

])in [35]: s1

out[35]:

a 7.3c -2.5d 3.4e 1.5dtype: float64

in [36]: s2

out[36]:

a -2.1c 3.6e -1.5f 4.0g 3.1dtype: float64

in [37]: s1 +s2

out[37]:

a 5.2c 1.1d nan

e 0.0f nan

g nan

dtype: float64

生成值

in [38]: s3 = series([-2.1, 3.6, -1.5, 4, 3.1], index=['

a', '

c', '

e', '

f', 'g'

])in [39]: s1 + s2 +s3

out[39]:

a 3.1c 4.7d nan

e -1.5f nan

g nan

dtype: float64

也就是說nan值不會變

add   用於加法(+)方法

sub 用於減法(-)方法

div 用於除法(/)方法

mul 用於乘法(*)方法

in [45]: df1 = dataframe(np.arange(9.).reshape((3,3)), columns=list('bcd'), index=['ohio', "texas", "colorado"])

in [46]: df2 = dataframe(np.arange(12.).reshape((4,3)), columns=list('bde'), index=["uhah", 'ohio', "texas", "oregon"])

in [47]: df1 +df2

out[47]:

b c d e

colorado nan nan nan nan

ohio 3.0 nan 6.0nan

oregon nan nan nan nan

texas 9.0 nan 12.0nan

uhah nan nan nan nan

那麼可以使用add方法,傳入df2乙個fill_valued引數

in [8]: df1.add(df2, fill_value=0)

out[8]:

b c d e

colorado 6.0 7.0 8.0nan

ohio 3.0 1.0 6.0 5.0oregon 9.0 nan 10.0 11.0texas 9.0 4.0 12.0 8.0uhah 0.0 nan 1.0 2.0

series

in [40]: arr = np.arange(12.).reshape((3, 4))

in [41]: arr

out[41]:

array([[ 0., 1., 2., 3.],

[ 4., 5., 6., 7.],

[ 8., 9., 10., 11.]])

in [42]: arr[0]

out[42]: array([ 0., 1., 2., 3.])

in [43]: arr -arr[0]

out[43]:

array([[ 0., 0., 0., 0.],

[ 4., 4., 4., 4.],

[ 8., 8., 8., 8.]])

dataframe

in [44]: frame = dataframe(np.arange(12.).reshape((4,3)), columns=list('

bde'), index=["

uhah

", '

ohio

', "

texas

", "

oregon"])

in [45]: series =frame.ix[0]

in [46]: frame -series

out[46]:

b d e

uhah 0.0 0.0 0.0ohio 3.0 3.0 3.0texas 6.0 6.0 6.0oregon 9.0 9.0 9.0

注意:如果某個索引值在dataframe的列或series的索引中找不到, 則參與運算的兩個物件就會被重新索引以形成並集

in [47]: series2 = series(range(3), index=['

b', '

e', 'f'

])in [48]: frame +series2

out[48]:

b d e f

uhah 0.0 nan 3.0nan

ohio 3.0 nan 6.0nan

texas 6.0 nan 9.0nan

oregon 9.0 nan 12.0 nan

如果希望列在行上廣播,必須使用算術運算方法

in [63]: frame.sub(series, axis=0)

out[63]:

b d e

uhah -1.0 0.0 1.0ohio -1.0 0.0 1.0texas -1.0 0.0 1.0oregon -1.0 0.0 1.0

pandas算術運算

df1 dataframe np.arange 12 reshape 3,4 columns list abcd df1out 74 a b c d 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11df2 dataframe np.arange 20 reshape 4,5 colum...

算術運算和陣列

因為短是2個位元組,每個位址不同於2。很難得看到 和 用這樣的方式與指標運算子。然而,更常見的是看到 或 運算元被用來增加或減少乙個指標指向陣列中的下乙個或前乙個元素。指標的算術運算和陣列 如果是乙個指標,指向陣列的第乙個元素 元素0 的陣列,並新增1到指標已經返回下乙個物件,然後排列 1點必須到二...

指標那些事(算術運算 和陣列的關係)

指標算術運算有三種 指標加數字 指標減數字 指標減指標。指標加減數字 指標加減法需要調整指標,調整的權重是指標本身清楚乙個 號,在求sizeof 的長度。eg int main 指標減指標合法 指標加指標不合法 a,算出兩個指標間隔的位元組數,b,除以調整的權重,調整的權重是指標本身去掉乙個 號,再...