歡迎您光臨本站 註冊首頁

pandas DataFrame運算的實現

←手機掃碼閱讀     wooen @ 2020-06-15 , reply:0

1 算術運算

add(other)
 

比如進行數學運算加上具體的一個數字

  data['open'].add(1)    2018-02-27 24.53  2018-02-26 23.80  2018-02-23 23.88  2018-02-22 23.25  2018-02-14 22.49

 

sub(other)

2 邏輯運算

2.1 邏輯運算符號
 

例如篩選data[“open”] > 23的日期數據

data[“open”] > 23返回邏輯結果

  data["open"] > 23    2018-02-27  True  2018-02-26 False  2018-02-23 False  2018-02-22 False  2018-02-14 False    # 邏輯判斷的結果可以作為篩選的依據  data[data["open"] > 23].head()

 


 

完成多個邏輯判斷,

  data[(data["open"] > 23) & (data["open"] < 24)].head()

 

2.2 邏輯運算函數

query(expr)

expr:查詢字符串

通過query使得剛才的過程更加方便簡單

  # 以字符串形式  data.query("open23").head()

 

isin(values)
 例如判斷'open'是否為23.53和23.85

  # 可以指定值進行一個判斷,從而進行篩選操作  data[data["open"].isin([23.53, 23.85])]

 

3 統計運算

3.1 describe

綜合分析: 能夠直接得出很多統計結果,count, mean, std, min, max 等

  # 計算平均值、標準差、最大值、最小值  data.describe()

 

3.2 統計函數

Numpy當中已經詳細介紹,在這裡我們演示min(最小值), max(最大值), mean(平均值), median(中位數), var(方差), std(標準差),mode(眾數)結果:
 


 

對於單個函數去進行統計的時候,座標軸還是按照默認列“columns” (axis=0, default),如果要對行“index” 需要指定(axis=1)

max()、min()

  # 使用統計函數:0 代表列求結果, 1 代表行求統計結果  data.max(0)    open     34.99  high     36.35  close     35.21  low     34.01  volume    501915.41  price_change   3.03  p_change    10.03  turnover    12.56  my_price_change   3.41  dtype: float64

 

std()、var()

  # 方差  data.var(0)    open    1.545255e+01  high    1.662665e+01  close    1.554572e+01  low    1.437902e+01  volume    5.458124e+09  price_change  8.072595e-01  p_change   1.664394e+01  turnover   4.323800e+00  my_price_change 6.409037e-01  dtype: float64    # 標準差  data.std(0)    open     3.930973  high     4.077578  close     3.942806  low     3.791968  volume    73879.119354  price_change   0.898476  p_change    4.079698  turnover    2.079375  my_price_change  0.800565  dtype: float64

 

median():中位數

中位數為將數據從小到大排列,在最中間的那個數為中位數。如果沒有中間數,取中間兩個數的平均值。

  df = pd.DataFrame({'COL1' : [2,3,4,5,4,2],       'COL2' : [0,1,2,3,4,2]})    df.median()    COL1 3.5  COL2 2.0  dtype: float64

 

idxmax()、idxmin()

  # 求出最大值的位置  data.idxmax(axis=0)    open    2015-06-15  high    2015-06-10  close    2015-06-12  low    2015-06-12  volume    2017-10-26  price_change  2015-06-09  p_change   2015-08-28  turnover   2017-10-26  my_price_change 2015-07-10  dtype: object      # 求出最小值的位置  data.idxmin(axis=0)    open    2015-03-02  high    2015-03-02  close    2015-09-02  low    2015-03-02  volume    2016-07-06  price_change  2015-06-15  p_change   2015-09-01  turnover   2016-07-06  my_price_change 2015-06-15  dtype: object

 

3.3 累計統計函數


 

那麼這些累計統計函數怎麼用?
 


 

以上這些函數可以對series和dataframe操作

這裡我們按照時間的從前往後來進行累計

排序

  # 排序之後,進行累計求和  data = data.sort_index()

 

對p_change進行求和

  stock_rise = data['p_change']  # plot方法集成了前面直方圖、條形圖、餅圖、折線圖  stock_rise.cumsum()    2015-03-02  2.62  2015-03-03  4.06  2015-03-04  5.63  2015-03-05  7.65  2015-03-06  16.16  2015-03-09  16.37  2015-03-10  18.75  2015-03-11  16.36  2015-03-12  15.03  2015-03-13  17.58  2015-03-16  20.34  2015-03-17  22.42  2015-03-18  23.28  2015-03-19  23.74  2015-03-20  23.48  2015-03-23  23.74

 

那麼如何讓這個連續求和的結果更好的顯示呢?
 


 

如果要使用plot函數,需要導入matplotlib.

  import matplotlib.pyplot as plt  # plot顯示圖形  stock_rise.cumsum().plot()  # 需要調用show,才能顯示出結果  plt.show()

 

關於plot,稍後會介紹API的選擇

4 自定義運算

apply(func, axis=0)

  • func:自定義函數

  • axis=0:默認是列,axis=1為行進行運算

定義一個對列,最大值-最小值的函數

  data[['open', 'close']].apply(lambda x: x.max() - x.min(), axis=0)    open  22.74  close 22.85  dtype: float64

  


[wooen ] pandas DataFrame運算的實現已經有234次圍觀

http://coctec.com/docs/python/shhow-post-238636.html