這是書籍《Pandas Cookbook》書籍第02章的代碼復現,所有代碼運行在Jupyter Notebook上,原講解地址是:
https://www.jianshu.com/p/13dcecdacd7c
我上傳代碼的github地址是:
https://github.com/Asunqingwen/PandasCookbook.git
github上有該書中用到的data,里面代碼會不定期更新(因為工作原因,時間不定),直到本書學習完成!
相比原講解,會穿插一些自己的理解,水平有限,請各路大神指正。
文章目錄
- 1.選取多個DataFrame列
- 2.對列名進行排序
- 3.在整個DataFrame上操作
- 4.串聯DataFrame方法
- 5.在DataFrame上使用運算符
- 6.比較缺失值
- 7.矩陣轉置
- 8.確定大學校園多樣性
1.選取多個DataFrame列
在第01章中講過,DataFrame數據結構的一列就是一個Series,所以選擇多列的方式和第01章中選取Series類似,當我們選取的列數大于1時,[]中的key必須是一個由列名組成的列表,不然會出錯
movie = pd.read_csv('data/movie.csv')
movie_actor_director = movie[['actor_1_name','actor_2_name','actor_3_name','director_name']]
movie_actor_director.head()
#錯誤選取多列的方式
movie['actor_1_name','actor_2_name','actor_3_name',"director_name"]
如果僅僅只選擇一列,[]中的key可以是列名組成的單列表,也可以是直接的列名,但是要注意這兩種方式的返回結果是一樣的,但是數據類型不一樣——從下圖可以看出,以列表作為key,返回的還是一個DataFrame;以列名直接作為key,返回的則是一個Series
DataFrame除了可以用列名組成的list進行列選取,還可以用基于類型的select_dtypes()和基于模式匹配的filter()
#使用select_dtypes(),選取整數列
movie.select_dtypes(include=['int64']).head()
#選取所有的數值列
movie.select_dtypes(include=['number']).head()
#通過filter()函數過濾選取多列
movie.filter(like='facebook').head()
#通過正則表達式選取多列
movie.filter(regex='\d').head()
#filter()函數,傳遞列表到參數items,選取多列
movie.filter(items=['actor_1_name','asdf']).head()
2.對列名進行排序
將DataFrame數據輸出的列名順序進行重排
#打印列索引
movie.columns
#將列索引按照指定的順序排列
disc_core = ['movie_title','title_year','content_rating','genres']
disc_people = ['director_name','actor_1_name','actor_2_name','actor_3_name']
disc_other = ['color','country','language','plot_keywords','movie_imdb_link']
cont_fb = ['director_facebook_likes','actor_1_facebook_likes','actor_2_facebook_likes',
'actor_3_facebook_likes', 'cast_total_facebook_likes', 'movie_facebook_likes']
cont_finance = ['budget','gross']
cont_num_reviews = ['num_voted_users','num_user_for_reviews', 'num_critic_for_reviews']
cont_other = ['imdb_score','duration', 'aspect_ratio', 'facenumber_in_poster']
new_col_order = disc_core + disc_people + disc_other + \
cont_fb + cont_finance + cont_num_reviews + cont_other
#檢驗列名順序重定義后,是否有重復的
set(movie.columns) == set(new_col_order)
movie2 = movie[new_col_order]
movie2.head()
3.在整個DataFrame上操作
類似于第01章Series的操作,主要是求取基本的統計特征min,max,medium,std,percentiles等
pandas中的sum默認是以列為單位,求取一列的和;調用基本統計特征時,有個skipna參數,這個參數默認值是True,即忽略缺失值;如果設置為False,則不忽略缺失值,即有缺失值的列不會進行相應特征計算,用NaN顯示,下圖的RuntimeWarning也是因為Nan的原因
4.串聯DataFrame方法
5.在DataFrame上使用運算符
類似于第01章的Series,用數學符號或對應的函數進行基本數學運算,進行運算的數據必須是同類型的
6.比較缺失值
pandas和numpy一樣都用NaN對象來表示缺失值,這是一個不等于自身的特殊對象,只有運算符——不等于NaN,才會使得比較結果返回True
比較兩個DataFrame,就用assert_frame_equal()函數,但是這個函數返回的是None,所以需要用try-except來判定比較的連個DataFrame是否相等
7.矩陣轉置
個人感覺,這一部分好像和矩陣的轉置沒啥關系,主要是兩個函數cumsum和sort_values——cumsum是個累加函數,參數axis指定累加的方向,比如axis=1,則是行方向累加,第一列不動,逐列累加到后面的列;sort_values則是一個排序函數,也有個參數axis用來指定排序的方向,但是它第一個參數是by,必須指定為和axis對應的列名或者行名,才能對該列名或行名后的所以列或行進行相應的排序
8.確定大學校園多樣性
這一段主要是通過pandas的一些基本數據處理方式,獲取大學人口種類分布的多樣性,首先是數據清洗,去除缺失值
給定一個閾值,每個種族的人口比例大于0.15,計算出每個學校人口比例大于0.15的種族有多少個,最后對種類數進行降序排列,輸出前5個
用loc函數查看最具有人口多樣性的兩個大學的人口具體分布情況,同時查看了US News公布的前五所大學在我們所計算的多樣性結果中的情況
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
