一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Tushare挖地兔: Hello pandas! 新 手 新 篇 Hello pandas 碰到一些Python或者pandas的初學者,很多基礎(chǔ)的語法和使用方法都還沒有...

 rcylbx 2018-11-29

碰到一些Python或者pandas的初學者,很多基礎(chǔ)的語法和使用方法都還沒有學會就開始打算用Tushare進行數(shù)據(jù)分析毫無疑問會無從下手甚至開始懷疑人生直到放棄。

其實只要稍微花一點時間學習一下基礎(chǔ)知識,就會變得豁然開朗,再深入學習后就得心應手了。

以下是一個用戶發(fā)來的學習筆記歡迎更多用戶投稿~_~,從入門到精通只差比別人少玩了幾輪游戲。

寫在前面

網(wǎng)上介紹python之pandas庫非常多,這篇從sql語言的角度解讀,相信更適合有sql語言MySql基礎(chǔ)的你,像使用sql一樣搞定pandas。

依然要說安裝,本篇案例數(shù)據(jù)均取自tushare。

1安裝pandas,如果你安裝的是anaconda,那么就不用單獨安裝了因為anaconda已經(jīng)集成了pandas。

2、安裝tushare庫

Windows系統(tǒng)(win7及以上)

a)打開Anaconda Prompt

b)輸入命令pip install tushare

c)按Enter

安裝tushare如果你看過前篇python數(shù)據(jù)處理之入門,安裝python安裝python庫章節(jié)亦可見。

還是那句話,最重要的是業(yè)務python是幫你實現(xiàn)的工具。

創(chuàng)建表

對于mysql而言要查看或處理其數(shù)據(jù),首先數(shù)據(jù)肯定得是存儲在某個表中,這個表是個二維的結(jié)構(gòu)。

在mysql創(chuàng)建表的語句是create table ……

那么在pandas里,這種二維的數(shù)據(jù)結(jié)構(gòu)是怎么呈現(xiàn)的呢?他叫DataFrame創(chuàng)建一個DataFrame就相當于創(chuàng)建了一張表。

比如,在tushare返回的日行情數(shù)據(jù)get_k_data結(jié)果就是DataFrame。

上代碼

運行結(jié)果

這個運行結(jié)果是不是超級熟悉

說說索引

第1列,是不是類似你們經(jīng)??吹降淖栽鲩LID,那么在DataFrame,他叫index(索引),這個索引非常重要,在將來的數(shù)據(jù)分析計算使用非常頻繁

所以,對于這個index,pandas也提供了一些函數(shù)滿足你對他的要求,比如set_index,reset_index,舉個set_index的例子,當我想使用date列作為索引的時候,請看下面截圖代碼

運行結(jié)果

字段

從上面截圖可以一目了然的看到字段,對字段的操作,mysql有ALTER命名,那么對于pandas是什么樣的呢,字段其實是個一維的結(jié)構(gòu),在pandas里面叫Series

加個字段

我想加個字段,內(nèi)容為Boss出品

這樣這個新的字段就加上了并且賦了值

請看執(zhí)行結(jié)果

刪個字段

有字段我不想要,怎么辦,簡單哈,刪字段唄pandas提供了drop函數(shù)可以用來刪字段,當日,也可以使用篩選filter等等

比如,對于調(diào)出的數(shù)據(jù)結(jié)果,開高低價格用不上那就去掉。

細心的你一定看到了axis這個參數(shù),沒錯drop可以刪除列也可以對行進行刪除。

執(zhí)行結(jié)果

我很懶截個執(zhí)行結(jié)果的圖都不想干,咱們自己寫代碼,親自執(zhí)行看結(jié)果

修改字段

Pandas不需要指定數(shù)據(jù)類型,那么就只剩下修改列名了。

你們想改哪個字段名,我想把date修改為trade_date。

執(zhí)行結(jié)果

!

數(shù)據(jù)查詢

像寫SQL一樣,使用pandas

實現(xiàn)select

sql查詢,select后面跟著的就是選字段,

pandas,!!他更牛,不但可以根據(jù)列名來選,還能根據(jù)位置來選

1、根據(jù)列名來選

filter,loc,atixdropdrop是反向的參見刪個字段,以loc為例,at與loc相近。

另外,還有一種類似切片的方法如下

df2 = df[['date', 'code', 'close']]

2、根據(jù)位置來選

iloc,iat,ix

以iloc為例,iat與iloc相近

說說ix

細心的你們肯定又注意到了,根據(jù)列表和位置來選,都有ix

ix,既能當loc用,又能當iloc用兼有根據(jù)列名和位置篩選篩選兩種功能

實現(xiàn)where

1locilocat,iatix

使用位置過濾

還記得前面說過,pandas的index很常用嗎,沒錯在數(shù)據(jù)過濾查詢里就會用到了。使用loc,iloc,at,iat,ix過濾,上述截圖大家注意到?jīng)]有,無論是根據(jù)列名,還是根據(jù)位置選擇列,在前面都有個冒號:

沒錯這個就是用來做行篩選的,相當于mysql中的where

執(zhí)行結(jié)果在篩選的index范圍內(nèi),不過你們注意沒有,loc與iloc的過濾結(jié)果略微有些差異

執(zhí)行結(jié)果

很明顯,使用loc,包含了篩選使用的索引而iloc沒有。

這個是使用數(shù)字序列,如果使用日期作為索引,大家的感受可能會更深一些,

比如

先設(shè)置了日期列作為索引,再使用loc對數(shù)據(jù)進行行列篩選。

--執(zhí)行什么?

--什么結(jié)果?

--結(jié)什么果?

算了,咱們敲一遍代碼自己執(zhí)行看結(jié)果吧。

查詢篩選

pandas對行的篩選必須要使用index索引非也,非也,mysql里有的,pandas肯定能滿足你,請繼續(xù)往下看

mysql里篩選使用的andorin,not in之pandas實現(xiàn)。

為了舉例更方便,讓大家更直觀我在tushare.get_k_data調(diào)了浦發(fā)銀行、萬科兩只股票的行情。

代碼運行后,就有了浦發(fā)銀行萬科的日行情

1and之實現(xiàn)

篩選出浦發(fā)銀行2018年1月11日的行情

使用符號&

2or之實現(xiàn)

篩選收盤價大于35元,或浦發(fā)銀行2018年1月11日的行情

使用符號|

3、 in之實現(xiàn)

篩選浦發(fā)銀行、萬科,2018年1月11日和12日兩天的日行情

4not in 之實現(xiàn)

篩選浦發(fā)銀行、萬科不要2018年1月11日和12日這兩天的日行情

另外,還可以使用query函數(shù)來構(gòu)造篩選,篩選出浦發(fā)銀行日行情

order排序

對應mysql之order by

pandas有使用索引排序或使用列排序兩種選擇分別是sort_index, sort_values,使用參數(shù)ascendingTrueFalse來滿足對升序或降序的要求比如

1、使用索引按降序排列

2、按收盤價升序排列

參數(shù)ascending默認等于True升序排列,所以不用寫了。

取n行

對應mysql之limit

pandas不但能取前n行,還提供函數(shù)可以取后n行分別是head()、tail()

取前4行、后4行

MySql通常有先排序,再limit,pandas同樣可以一行代碼實現(xiàn)

去重

對應MySql之distinct

在數(shù)據(jù)查詢中,通常會使用去重對應的pandas函數(shù)是drop_duplicates并且更前大的是drop_duplicates提供了參數(shù)keep,供你選擇保留第1條亦或是將重復數(shù)據(jù)全刪除。

空值

對應MySql之Null

pandas有空日期pd.NaT,空值None,空值亦或稱之為缺失值

1、缺失值篩選

MySql的篩選通常有where date is null,或is not null

pandas對應的篩選辦法是

df = df[df['close'].isnull()]

df = df[df['close'].notnull()]

代碼

另外pandas還提供了dropna,用來做缺失值的行列選擇這里不再贅述,大家可以使用參考鏈接去看下dropna的使用方法,

參考鏈接

http://pandas./pandas-docs/stable/generated/pandas.DataFrame.dropna.html

再重點說下缺失值的填充

2 fillna

對缺失值的填充,是咱們經(jīng)常遇到的,比如填充個假值,用前一天數(shù)據(jù)填充亦或用下一交易日數(shù)據(jù)填充

1) 填充為指定的值,即常說的賦值

同時指定多個列賦值

df.fillna({'close': 1, 'NullValue': 9}, inplace=True)

2) 使用前一天值/后一天值填充

使用fillna提供的的method參數(shù)即可

是不是昏昏了我有點昏昏了,再介紹兩個提提神。

下面介紹兩個相對于MySql查詢的兩個重量級應用關(guān)聯(lián)查詢和分組查詢

關(guān)聯(lián)查詢(join)

pandas指join和merge

這兩個的使用方法相近,都能通過索引關(guān)聯(lián)和字段關(guān)聯(lián)

1先說join

join被用在通過索引關(guān)聯(lián)較多

DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

e.g.

how : {left, right, outer, inner}, default: left

left左連接

right右連接

outer外連接

inner內(nèi)連接

上述關(guān)聯(lián)關(guān)系,相信不用詳細介紹,大家都知道了跟Mysql的關(guān)聯(lián)方法極其相近

lsuffix和rsuffix

這兩個參數(shù),用來標記當關(guān)聯(lián)DataFrame出現(xiàn)相同字段名稱的時候區(qū)分方法

2merge

merge這個單詞,印象最深刻的是聽青桃說merge在耳畔縈繞。

下面就介紹下pandas里的merge

merge被用在通過字段關(guān)聯(lián)較多

DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

merge里,

how同上join

(on)(left_on,right_on),(left_index,right_index)這3組參數(shù)是單選項,3選1就可以了

on用在當關(guān)聯(lián)的兩個DataFrame的字段名相同時;

left_on,right_on當關(guān)聯(lián)的兩個DataFrame的字段名不相同時

left_index,right_index使用索引關(guān)聯(lián)

e.g.

3、concat, append

大家在看代碼的時候一定看到了append,沒錯就是在調(diào)用浦發(fā)銀行、萬科兩只股票的時候用到了,

append,將兩個DataFrame按行合并

那么concat呢,同樣的只是concat功能更多,還提供了axis參數(shù)供選擇按行還是按列合并相當于MySql里的union查詢

分組查詢

MySql之group by

分組求pandas提供的函數(shù)值,及自定義的函數(shù)值如beta

常見的MySql之group by有求和,求最大值最小值,平均值等

pandas能支持的那就多了求波動率,求協(xié)方差等等等,還可以自定義函數(shù)然后調(diào)用,說著說著不由得心中一陣興奮。

e.g.

對成交量求和,對收盤價求最小值和最大值,對最高價求平均值,對最低價求標準差

寫到這里,基本上將常用的pandas方法介紹好了。

輸入輸出

那么大家可能還有個困惑,案例數(shù)據(jù)都是從tushare調(diào)用的在日常使用時,還有不使用tushare的情況那么這個時候,該如何讀取輸出和存儲輸入數(shù)據(jù)呢?

這就是這一節(jié)要說的內(nèi)容

先說批量讀取數(shù)據(jù)

read_*

pandas提供了很多種讀取數(shù)據(jù)的方法

read_sql,read_csv,read_excel,read_json

重點介紹下read_sql

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

介紹一下前面最常用的兩個參數(shù)后面的參數(shù)以后大家在使用的時候慢慢體會

sql就是你最常用的sql查詢語句

conn連接mysql的接口

還是上栗子,更直觀的看明白怎么使用

被抹掉的地方,大家填下你們自己的主機名(或IP)端口,數(shù)據(jù)庫名,用戶名,密碼

sql換成你想要查詢的數(shù)據(jù),最后打印下dfprint df就能很清晰的,你的sql將要查詢的數(shù)據(jù),被加載到內(nèi)存中了接下來,你就可以對這個數(shù)據(jù)進行處理了

是不是很簡單!

還有其他的read,方法很類似。

to_*

說完讀取,該說下,怎么存儲數(shù)據(jù)了目標格式有很多

to_sql, to_csv,to_excel,to_json

介紹下to_excel,

數(shù)據(jù)量不大的時候,借助excel工具分析,是很方便的比如,你可能使用python爬蟲爬了一些數(shù)據(jù),數(shù)據(jù)量也不大,那么你就可以將爬下來的數(shù)據(jù)轉(zhuǎn)換為DataFrame再保存到excel中。

那么怎么使用to_excel將數(shù)據(jù)保存到excel里呢同樣很簡單

e.g.

還是從tushare上拿數(shù)據(jù),保存到D盤叫做600000的excel文件

代碼

代碼說明

定義變量File定義將數(shù)據(jù)保存的目標文件,使用pandas函數(shù)ExcelWriter,

使用to_excel,并執(zhí)行保存在哪個sheet上,執(zhí)行保存

結(jié)果

去D盤看看,是不是有個文件叫600000.xlsx的

進階

所謂進階,實戰(zhàn)一把計算個簡單常用的。

不知大家剛剛注意到?jīng)]有調(diào)用的get_k_data沒有昨收盤,收盤價日收益率那么就來計算一下。

1、通過tushare接口把數(shù)據(jù)調(diào)出來

2、求昨收盤

code列分組,按日期升序排序

計算昨收盤

3計算日收益率

到這里,計算需求就完成了。有沒有激起學習的興趣!

后記

拖了很久,終于把Hello pandas寫好了,這里介紹的都是基本的最重要的還是在工作中親身使用。

學習代碼最重要的還是有業(yè)務場景,親自來寫進展就會很快,就像以前大家學習SQL一樣SQL同樣是數(shù)據(jù)分析最重要的工具之一,如果能再熟練的使用python,那么又將是一個飛躍

感謝Boo供稿,希望對初學者有一定幫助也期待更多熱愛學習的朋友參與進來,學數(shù)據(jù)、用數(shù)據(jù)

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    老司机精品在线你懂的| 91亚洲国产—区=区a| 中文字幕欧美视频二区| 久热人妻中文字幕一区二区| 国产精品不卡一区二区三区四区| 欧美激情一区=区三区| 日本精品中文字幕在线视频| 国产成人亚洲精品青草天美| 国产成人免费高潮激情电| 国产一区欧美午夜福利| 欧美精品亚洲精品日韩精品| 亚洲一区二区三区有码| 国产亚洲系列91精品| 国产日韩在线一二三区| 日韩高清一区二区三区四区| 日韩一区二区三区在线日| 日韩在线免费看中文字幕| 国产精品二区三区免费播放心| 美女黄片大全在线观看| 亚洲一区二区三区在线免费| 日本深夜福利视频在线| 国产精品久久男人的天堂| 欧美午夜国产在线观看| 亚洲高清中文字幕一区二区三区 | 欧美av人人妻av人人爽蜜桃| 少妇特黄av一区二区三区| 亚洲中文字幕有码在线观看| 亚洲午夜福利视频在线| 午夜直播免费福利平台| 欧美激情视频一区二区三区| 亚洲黄片在线免费小视频| 人妻亚洲一区二区三区| 日韩午夜老司机免费视频| 美女被草的视频在线观看| 人妻久久这里只有精品| 日韩综合国产欧美一区| 国产麻豆成人精品区在线观看| 亚洲一区二区三区熟女少妇| 日韩中文字幕免费在线视频| 人妻少妇系列中文字幕| 亚洲欧美日韩在线中文字幕|