重新研讀fish課代碼 01

前言: fish在千聊的課已經(jīng)收尾了。 她的課備得特別好,尤其是代碼的注釋做得特別好。 是很好的學(xué)習(xí)材料,我決定從頭,重新復(fù)現(xiàn)她的可見代碼,并把作業(yè)做一遍。 扎好基礎(chǔ),重新出發(fā)
import pandas as pd
%matplotlib inline

## stock = pd.read_csv('stock',parse_dates =True,index_col='Date')
## !! 文件名后面要加格式,才能被引用?。? 老犯這個錯誤
stock = pd.read_csv('stock.csv',parse_dates =True,index_col='Date')
stock.head()

stock.shape
(22, 5)
stock.columns
Index(['Open', 'High', 'Low', 'Close', 'Volume'], dtype='object')
stock.describe()
##!!  錯誤點(diǎn)1 少輸入了括號,為什么有些要加括號,有些不加呢?
##  錯誤點(diǎn)2 ,單詞總是打錯


stock.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x21d86f6e128>
stock.Close.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x21d86f8c8d0>

接下來是索引和切片
我認(rèn)為這些事第一課最有價(jià)值的地方。

print(stock.Open)
print (stock['Close'])
## @ stock.Open,意味著stock這個文件中的Open這列的數(shù)據(jù)。 
Date
2017-06-01    153.17
2017-06-02    153.58
2017-06-05    154.34
2017-06-06    153.90
2017-06-07    155.02
2017-06-08    155.25
2017-06-09    155.19
2017-06-12    145.74
2017-06-13    147.16
2017-06-14    147.50
2017-06-15    143.32
2017-06-16    143.78
2017-06-19    143.66
2017-06-20    146.87
2017-06-21    145.52
2017-06-22    145.77
2017-06-23    145.13
2017-06-26    147.17
2017-06-27    145.01
2017-06-28    144.49
2017-06-29    144.71
2017-06-30    144.45
Name: Open, dtype: float64
Date
2017-06-01    153.18
2017-06-02    155.45
2017-06-05    153.93
2017-06-06    154.45
2017-06-07    155.37
2017-06-08    154.99
2017-06-09    148.98
2017-06-12    145.42
2017-06-13    146.59
2017-06-14    145.16
2017-06-15    144.29
2017-06-16    142.27
2017-06-19    146.34
2017-06-20    145.01
2017-06-21    145.87
2017-06-22    145.63
2017-06-23    146.28
2017-06-26    145.82
2017-06-27    143.73
2017-06-28    145.83
2017-06-29    143.68
2017-06-30    144.02
Name: Close, dtype: float64
## 接下來是精確索引,感覺超有用!
print(stock.Close['2017-06-01'])
print(stock['Open']['2017-06-02'])
### 確實(shí)很好用,這個功能。

153.18
153.58
stock['Close'][0]

153.18000000000001
stock[['Close']]
### 這個雙層方括號,意思是只顯示close的列
stock[['Open','Close']]
##@ 這功能真的太好用了吧。  相當(dāng)于剪切兩列數(shù)據(jù)在一起,然后拼湊成新表格,這excle中,要好多次的操作才能實(shí)現(xiàn)哦。 
## 我之前還想 好好地學(xué)習(xí)excle來增進(jìn)計(jì)算技能,現(xiàn)在看來,不用了耶,直接深挖python的函數(shù)和方法,能直接省去好多環(huán)節(jié),哈哈哈哈我愛python
.loc 的作用到底是什么呢?

有點(diǎn)不記得了,這次好好體驗(yàn)試試吧

stock.loc['2017-06-01','Close']
## @ 我嘗試把日期放在后面,發(fā)現(xiàn)不行,原理應(yīng)該是先讀取索引列,這個數(shù)據(jù)的索引列是“date”,只有先在索引列種尋找,才可以進(jìn)行下一步。
153.18000000000001

感悟:

  • 直接索引,比如stock.Cloes['2017-06-01],是從列開始找數(shù)據(jù). 是先找到close這列,然后再去找其中的時間對應(yīng)項(xiàng)。
    而.loc則像是先找時間項(xiàng)。
  • 這種感覺就像一個軍官,來巡視十字方隊(duì)的軍人。
  1. A軍官,從方隊(duì)的西北角走來,先是橫著走,去找到某個士兵
  2. 而B軍官(.loc),則是豎著走,去找到某個士兵。
  3. 那么C軍官(.iloc)呢?
    慢慢摸索吧
stock.loc[:,'Close']
##@ :冒號的意思,原本是x:y,即索引列種第x到第y之間的數(shù)據(jù),如果只是冒號,那就表示從頭到尾全部的列。
Date
2017-06-01    153.18
2017-06-02    155.45
2017-06-05    153.93
2017-06-06    154.45
2017-06-07    155.37
2017-06-08    154.99
2017-06-09    148.98
2017-06-12    145.42
2017-06-13    146.59
2017-06-14    145.16
2017-06-15    144.29
2017-06-16    142.27
2017-06-19    146.34
2017-06-20    145.01
2017-06-21    145.87
2017-06-22    145.63
2017-06-23    146.28
2017-06-26    145.82
2017-06-27    143.73
2017-06-28    145.83
2017-06-29    143.68
2017-06-30    144.02
Name: Close, dtype: float64
stock.loc['2017-06-01':'2017-06-05','Open':'Close']
stock.loc['2017-06-01':'2017-06-05',['Close','Open']]
###@@ .loc[x,y]中的有兩個基本參數(shù),x代表基本的索引列參數(shù),即豎著的第一排位置,y代表橫著的位置

接下來是iloc時間啦。 我的理解iloc就是軍官直接把每個位置都編好了坐標(biāo),不再說,第幾排的,第幾個,而是直接用數(shù)字坐標(biāo)[3,2],大家都默認(rèn)這種規(guī)則是第三排的第二個人,不再管每排的名稱了。

stock.iloc[0,3]
153.18000000000001

那好吧,我就把iloc'索引理解為類似于經(jīng)緯度的坐標(biāo)系統(tǒng)吧。
以前我們說我現(xiàn)在的這個個地方,肯定是說“中國-四川-成都-溫江”

而,坐標(biāo)直接說‘北緯30.41.17,東經(jīng)103.51.55’ 索引列就不再那么重要了。
所以iloc是很重要的索引方式,我稱之為坐標(biāo)索引法。

它的索引是從0 開始的,0代表第一位哦 ,大哥

0:3 代表第0,第1,第2. 不包含第3哦

stock.iloc[0:3,0:4]
stock.iloc[0:4,:]
stock['f']=stock['Open']-stock['Close']
stock.head()
stock['Close'].shift(1)
###@ 我的理解這個shift(1)是把那一列往下移動一格。 他的目的是想用昨天的收盤價(jià),減去今天的開盤價(jià),然后來計(jì)算閉盤期間發(fā)生了什么變化
Date
2017-06-01       NaN
2017-06-02    153.18
2017-06-05    155.45
2017-06-06    153.93
2017-06-07    154.45
2017-06-08    155.37
2017-06-09    154.99
2017-06-12    148.98
2017-06-13    145.42
2017-06-14    146.59
2017-06-15    145.16
2017-06-16    144.29
2017-06-19    142.27
2017-06-20    146.34
2017-06-21    145.01
2017-06-22    145.87
2017-06-23    145.63
2017-06-26    146.28
2017-06-27    145.82
2017-06-28    143.73
2017-06-29    145.83
2017-06-30    143.68
Name: Close, dtype: float64
stock['change']=stock['Close']-stock['Close'].shift(1)
stock.head()

過濾

我的理解是這個過濾相當(dāng)于篩選功能

stock.Volume>5e7

## 原來這是一個布爾索引啊,不能夠直接顯示是哪些明細(xì)嗎?
Date
2017-06-01    False
2017-06-02    False
2017-06-05    False
2017-06-06    False
2017-06-07    False
2017-06-08    False
2017-06-09     True
2017-06-12     True
2017-06-13    False
2017-06-14    False
2017-06-15    False
2017-06-16     True
2017-06-19    False
2017-06-20    False
2017-06-21    False
2017-06-22    False
2017-06-23    False
2017-06-26    False
2017-06-27    False
2017-06-28    False
2017-06-29    False
2017-06-30    False
Name: Volume, dtype: bool
stock[stock.Volume>5e7]
###這功能也太強(qiáng)大了吧
##??? 不過為什么一定要先在前面加上文件名稱,才能顯示成數(shù)據(jù)呢?

布爾運(yùn)算是有規(guī)則的

  • and 且
  • or 或
  • not 非
## stock[stock.Close>stock.Open&stock.Volume>3e7]
stock[(stock.Close>stock.Open)&(stock.Volume>3e7)]
#!!! 我在原來代碼中,沒有加括號,這實(shí)在是個失誤。 為什么呢?其實(shí)復(fù)雜運(yùn)算都是要加括號的啊

##@@這是and的關(guān)系,并且。就是要滿足兩個條件才可以的
#接下來是或者關(guān)系
stock[(stock.Open>stock.Close)|(stock.change<0)]







#第一題:2017年6月22日當(dāng)天的收盤價(jià)是多少?
stock.loc['2017-6-22','Close']
145.63
##第二題:第二題:** 成交量超過7千萬的是哪一天?
stock[stock.Volume>7e7]
#第三題:在2017年6月28日,收盤價(jià)減去開盤價(jià)是多少?
stock.loc['2017-06-28','Close']-stock.loc['2017-06-28','Open']
1.3400000000000034
#第四題: 開盤價(jià)低于144并且成交量大于5千萬那一天的收盤價(jià)是多少?
stock[(stock.Open<144)&(stock.Volume>5e7)]

stock.change.max()
4.0699999999999932

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容