1. 程式人生 > >pandas學習筆記5---DataFrame/Series基本功能之計算

pandas學習筆記5---DataFrame/Series基本功能之計算

OK,繼續學習pandas的基本功能之計算,pandas庫的資料結構幾乎與excel或資料庫的結構完全一樣,非常接近我們日常所用的資料形式。同時也是資料分析/挖掘計算的常用基礎庫,其計算功能的重要性自然不言而喻。

本次我們針對pandas的主要資料結構Series/DataFrame的計算功能和計算方式進行學習,主要包括算術的資料對齊、錯誤值填充、DataFrame和Series運算

算術的資料對齊、錯誤值填充

算術,自然指的是加、減、乘、除,對應的方法為add、sub、mul、div,當然也可以直接進行算術運算比如pd1+pd2,pd1/pd2等等。pandas演算法方法的使用方式為pd1.add(pd2)

pandas物件在進行算術運算時會自動對齊索引,即index和columns,相同索引位置的資料才會進行計算。若找不到對應的索引則會產生一個NaN。若不想出現NaN則指定一個錯誤值填充,即fill_value,當對應索引值不存在時用fill_value的值代替進行計算,在上節重索引部分也提到了這個錯誤值填充。

frame2=DataFrame(np.arange(12).reshape(4,3),index=list('abcd'))

frame2
Out[181]: 
   0   1   2
a  0   1   2
b  3   4   5
c  6   7   8
d  9  10  11

frame+frame2
Out[182]: 
      0     1     2
a   0.0   2.0   4.0
b   6.0   8.0  10.0
c  12.0  14.0  16.0
d   NaN   NaN   NaN

frame.add(frame2,fill_value=10)
Out[185]: 
      0     1     2
a   0.0   2.0   4.0
b   6.0   8.0  10.0
c  12.0  14.0  16.0
d  19.0  20.0  21.0

DataFrame和Series之間的運算

Series為一列資料結構,DataFrame為兩列以上資料結構,我們可以看做為一維陣列,和二維陣列,那麼二者之間的計算方式與一維和二維資料之間必然是通用的,比如廣播。當然pandas的資料有索引,故其計算方式在 預設情況下都會根據索引進行廣播,通常是Series.index與DataFrame.columns想匹配進行計算,依次向下進行廣播。

frame
Out[206]: 
   0  1  2
a  0  1  2
b  3  4  5
c  6  7  8

obj
Out[207]: 
a    4.5
b    7.2
c   -5.3
d    3.6
dtype: float64

frame+obj
Out[208]: 
    0   1   2   a   b   c   d
a NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN

obj.index=[1,2,3,4]

frame+obj
Out[210]: 
    0     1     2   3   4
a NaN   5.5   9.2 NaN NaN
b NaN   8.5  12.2 NaN NaN
c NaN  11.5  15.2 NaN NaN

如果希望Series.index與DataFram.index想匹配,依次按照列向右廣播,那麼需要指定axis=0即軸,同時就需要依靠上面所提到的加減乘除方法,即add、sub。。。

obj.index=list('abcd')

obj
Out[212]: 
a    4.5
b    7.2
c   -5.3
d    3.6
dtype: float64

frame.add(obj,axis=0)
Out[213]: 
      0     1     2
a   4.5   5.5   6.5
b  10.2  11.2  12.2
c   0.7   1.7   2.7
d   NaN   NaN   NaN