pandas學習筆記5---DataFrame/Series基本功能之計算
阿新 • • 發佈:2018-12-11
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