1. 程式人生 > 程式設計 >pandas DataFrame運算的實現

pandas DataFrame運算的實現

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()

pandas DataFrame運算的實現

完成多個邏輯判斷,

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

pandas DataFrame運算的實現

2.2 邏輯運算函式

query(expr)

expr:查詢字串

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

# 以字串形式
data.query("open<24 & open>23").head()

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

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

pandas DataFrame運算的實現

3 統計運算

3.1 describe

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

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

pandas DataFrame運算的實現

3.2 統計函式

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

pandas DataFrame運算的實現

對於單個函式去進行統計的時候,座標軸還是按照預設列“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,2],'COL2' : [0,1,2,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 累計統計函式

pandas DataFrame運算的實現

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

pandas DataFrame運算的實現

以上這些函式可以對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

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

pandas DataFrame運算的實現

如果要使用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

到此這篇關於pandas DataFrame運算的實現的文章就介紹到這了,更多相關pandas DataFrame運算內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!