【呆鳥譯Py】PyCon 大咖親傳 Pandas 25 式

Kevin Markham,數(shù)據(jù)科學(xué)講師碎紊,2002 年佑附,畢業(yè)于范德堡大學(xué),計(jì)算機(jī)工程學(xué)士仗考,2014 年音同,創(chuàng)建了 Data School,在線教授 Python 數(shù)據(jù)科學(xué)課程秃嗜,他的課程主要包括 Pandas瘟斜、Scikit-learn、Kaggle 競(jìng)賽數(shù)據(jù)科學(xué)痪寻、機(jī)器學(xué)習(xí)螺句、自然語(yǔ)言處理等內(nèi)容,迄今為止橡类,瀏覽量在油管上已經(jīng)超過(guò) 500 萬(wàn)次蛇尚。

Kevin Markham

Kevin 還是 PyCon 培訓(xùn)講師,主要培訓(xùn)課程如下:

  • PyCon 2016顾画,用 Scikit-learn 機(jī)器學(xué)習(xí)技術(shù)處理文本
  • PyCon 2018取劫,如何用 Pandas 更好(或更糟)地實(shí)現(xiàn)數(shù)據(jù)科學(xué)
  • PyCon 2019,Pandas 數(shù)據(jù)科學(xué)最佳實(shí)踐

本文基于 Kevin 于 2019 年 7 月推出的最新視頻教程研侣,匯總了他 5 年來(lái)最喜歡的 25 個(gè) pandas 操作技巧谱邪,希望大家喜歡。

Data School

目錄

  1. 查看 pandas 及其支持項(xiàng)的版本
  2. 創(chuàng)建 DataFrame
  3. 重命名列
  4. 反轉(zhuǎn)行序
  5. 反轉(zhuǎn)列序
  6. 按數(shù)據(jù)類型選擇列
  7. 把字符串轉(zhuǎn)換為數(shù)值
  8. 優(yōu)化 DataFrame 大小
  9. 用多個(gè)文件建立 DataFrame ~ 按行
  10. 用多個(gè)文件建立 DataFrame ~ 按列
  11. 從剪貼板創(chuàng)建 DataFrame
  12. 把 DataFrame 分割為兩個(gè)隨機(jī)子集
  13. 根據(jù)多個(gè)類別篩選 DataFrame
  14. 根據(jù)最大的類別篩選 DataFrame
  15. 操控缺失值
  16. 把字符串分割為多列
  17. 把 Series 里的列表轉(zhuǎn)換為 DataFrame
  18. 用多個(gè)函數(shù)聚合
  19. 用一個(gè) DataFrame 合并聚合的輸出結(jié)果
  20. 選擇行與列
  21. 重塑多重索引 Series
  22. 創(chuàng)建透視表
  23. 把連續(xù)型數(shù)據(jù)轉(zhuǎn)換為類別型數(shù)據(jù)
  24. 改變顯示選項(xiàng)
  25. 設(shè)置 DataFrame 樣式
  26. 彩蛋:預(yù)覽 DataFrame

文末有 Jupyter Notebook 下載庶诡,正文先上圖惦银。

0. 使用的數(shù)據(jù)集

原文的數(shù)據(jù)集是 bit.ly 短網(wǎng)址的,我這里在讀取時(shí)出問(wèn)題末誓,不穩(wěn)定扯俱,就幫大家下載下來(lái),統(tǒng)一放到了 data 目錄里喇澡。

drinks = pd.read_csv('data/drinks.csv')
movies = pd.read_csv('data/imdb_1000.csv')
orders = pd.read_csv('data/chipotle.tsv', sep='\t')
orders['item_price'] = orders.item_price.str.replace('$', '').astype('float')
stocks = pd.read_csv('data/stocks.csv', parse_dates=['Date'])
titanic = pd.read_csv('data/titanic_train.csv')
ufo = pd.read_csv('data/ufo.csv', parse_dates=['Time'])

本文中采用讓數(shù)據(jù)集主要為常見的酒水飲料迅栅、IMDB 電影、泰坦尼克號(hào)晴玖、飛碟目擊等數(shù)據(jù)集读存。

這里需要注意的是:

1) pd.read_csv('data/chipotle.tsv', sep='\t') 里的 chipotle.tsv为流,是用 tab 作為分隔符的,所以要增加參數(shù) sep=\t让簿;
2) orders.item_price.str.replace('$', '').astype('float')敬察,item_price 列是帶 $ 的文本,要用 .str.replace('$', '').astype('float') 去掉 $拜英,再把該列數(shù)據(jù)類型改為 float
3)ufo.csv里的 Time 列琅催,要用 parse_dates=['Time'])居凶,解析日期。

1. 查看 pandas 及其支持項(xiàng)的版本

使用 pd.__version__ 查看 pandas 的版本藤抡。

查看所有 pandas 的支持項(xiàng)版本侠碧,使用 show_versions 函數(shù)。比如缠黍,查看 Python弄兜、pandas、Numpy瓷式、matplotlib 等支持項(xiàng)的版本替饿。

2. 創(chuàng)建 DataFrame

創(chuàng)建 DataFrame 的方式有很多,比如贸典,可以把字典傳遞給 DataFrame 構(gòu)建器视卢,字典的 Key 是列名,字典的 Value 為列表廊驼,是 DataFrame 的列的值据过。

如果 DataFrame 的數(shù)據(jù)較多,用字典的方式就不合適了妒挎,需要輸入的東西太多绳锅。這時(shí),可以用 Numpy 的 random.rand() 函數(shù)酝掩,設(shè)定行數(shù)與列數(shù)鳞芙,然后把值傳遞給 DataFrame 構(gòu)建器。

這樣就可以生成 DataFrame 了期虾,但如果要用非數(shù)字形式的列名积蜻,需要強(qiáng)制把字符串轉(zhuǎn)換為列表, 再把這個(gè)列表傳給 columns 參數(shù)彻消。

這里要注意的是竿拆,字符串里的字符數(shù)量必須與 DataFrame 的列數(shù)一致。

3. 重命名列

用點(diǎn)(.)選擇 pandas 里的列寫起來(lái)比較容易宾尚,但列名里有空格丙笋,就沒(méi)法這樣操作了谢澈。

rename()方法改列名是最靈活的方式,它的參數(shù)是字典御板,字典的 Key 是原列名锥忿,值是新列名,還可以指定軸向(axis)怠肋。

這種方式的優(yōu)點(diǎn)是可以重命名任意數(shù)量的列敬鬓,一列、多列笙各、所有列都可以钉答。

還有一種簡(jiǎn)單的方式可以一次性重命名所有列,即杈抢,直接為列的屬性賦值数尿。

只想替換列名里的空格,還有更簡(jiǎn)單的操作惶楼,直接用 str.replace 方法右蹦,不必把所有的列名都敲一遍。

以上這三種方式都可以更改列名歼捐。

add_prefixadd_suffix 函數(shù)可以為所有列名添加前綴后綴何陆。

4. 反轉(zhuǎn)列序

反轉(zhuǎn) drinks 表的順序。

這個(gè)數(shù)據(jù)集按國(guó)家列出了酒水平均消耗量豹储,如果想反轉(zhuǎn)列序該怎么辦甲献?

最直接的方式是把 ::-1 傳遞給 loc 訪問(wèn)器,與 Python 里反轉(zhuǎn)列表的切片法一樣颂翼。

如果想讓索引從 0 到 1晃洒,用 reset_index()方法,并用 drop 關(guān)鍵字去掉原有索引朦乏。

這樣球及,行序就已經(jīng)反轉(zhuǎn)過(guò)來(lái)了,索引也重置為默認(rèn)索引呻疹。

5. 反轉(zhuǎn)列序

與反轉(zhuǎn)行序類似吃引,還可以用 loc 從左到右反轉(zhuǎn)列序。

逗號(hào)前面的分號(hào)表示選擇所有行刽锤,逗號(hào)后面的 ::-1 表示反轉(zhuǎn)列镊尺,這樣一來(lái),country 列就跑到最右邊去了并思。

6. 按數(shù)據(jù)類型選擇列

首先庐氮,查看一下 drinks 的數(shù)據(jù)類型:

選擇所有數(shù)值型的列,用 selec_dtypes() 方法宋彼。

同樣的方法弄砍,還可以選擇所有字符型的列仙畦。

同理,還可以用 datetime 選擇日期型的列音婶。

傳遞列表即可選擇多種類型的列慨畸。

還可以使用 exclude 關(guān)鍵字排除指定的數(shù)據(jù)類型。

7. 把字符串轉(zhuǎn)換為數(shù)值

再創(chuàng)建一個(gè)新的 DataFrame 示例衣式。

這個(gè) DataFrame 里的數(shù)字其實(shí)是以字符串形式保存的寸士,因此,列類型是 object碴卧。

要想執(zhí)行數(shù)學(xué)計(jì)算弱卡,要先把這些列的數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值型,下面的代碼用 astype() 方法把前兩列的數(shù)據(jù)類型轉(zhuǎn)化為 float螟深。

用這種方式轉(zhuǎn)換第三列會(huì)出錯(cuò)谐宙,因?yàn)檫@列里包含一個(gè)代表 0 的下劃線烫葬,pandas 無(wú)法自動(dòng)判斷這個(gè)下劃線界弧。

為了解決這個(gè)問(wèn)題,可以使用 to_numeric() 函數(shù)來(lái)處理第三列搭综,讓 pandas 把任意無(wú)效輸入轉(zhuǎn)為 NaN垢箕。

NaN 代表的是 0,可以用 fillna() 方法填充兑巾。

一行代碼就可以解決這個(gè)問(wèn)題条获,現(xiàn)在所有列的值都轉(zhuǎn)成 float 了。

8. 優(yōu)化 DataFrame 對(duì)內(nèi)存的占用

pandas 的 DataFrame 設(shè)計(jì)的目標(biāo)是把數(shù)據(jù)存到內(nèi)存里蒋歌,有時(shí)要縮減 DataFrame 的大小帅掘,減少對(duì)內(nèi)存的占用。

下面顯示了 drinks 占用的內(nèi)存堂油。

這里顯示 drinks 使用了 30.5 KB 內(nèi)存修档。

大型 DataFrame 會(huì)影響計(jì)算性能,甚至導(dǎo)致 DataFrame 讀入內(nèi)存失敗府框,下面介紹簡(jiǎn)單幾步吱窝,即可在讀取 DataFrame 時(shí)減少內(nèi)存占用。

第一步是只讀取切實(shí)所需的列迫靖,這里需要指定 usecols 參數(shù)院峡。

只選擇兩列以后,DataFrame 對(duì)內(nèi)存的占用減少到 13.7 KB系宜。

第二步是把包含類別型數(shù)據(jù)的 object 列轉(zhuǎn)換為 Category 數(shù)據(jù)類型照激,通過(guò)指定 dtype 參數(shù)實(shí)現(xiàn)。

把 continent 列改為 category 數(shù)據(jù)類型后盹牧,DataFrame 對(duì)內(nèi)存的占用進(jìn)一步縮減到 2.4 KB实抡。

注意:類別數(shù)量相對(duì)于行數(shù)較少時(shí)欠母,category 數(shù)據(jù)類型對(duì)對(duì)內(nèi)存占用的減少會(huì)比較有限。

9. 用多個(gè)文件建立 DataFrame ~ 按行

本段介紹怎樣把分散于多個(gè)文件的數(shù)據(jù)集讀取為一個(gè) DataFrame吆寨。

比如赏淌,有多個(gè) stock 文件,每個(gè) CSV 文件里只存儲(chǔ)一天的數(shù)據(jù)啄清。

下面是三天的股票數(shù)據(jù):

把每個(gè) CSV 文件讀取成 DataFrame六水,合并后,再刪除導(dǎo)入的原始 DataFrame辣卒,但這種方式占用內(nèi)存太多掷贾,而且要寫很多代碼。

使用 Python 內(nèi)置的 glob 更方便。

把文件名規(guī)則傳遞給 glob()熙参,這里包括通配符檀葛,即可返回包含所有合規(guī)文件名的列表。

本例里港准,glob 會(huì)查找 data 子目錄里所有以 stocks 開頭的 CSV 文件。

glob 返回的是無(wú)序文件名咧欣,要用 Python 內(nèi)置的 sorted() 函數(shù)排序列表浅缸。

調(diào)用 read_csv() 函數(shù)讀取生成器表達(dá)式里的每個(gè)文件,把讀取結(jié)果傳遞給 concat() 函數(shù)魄咕,然后合并為一個(gè) DataFrame衩椒。

注:原文里用的是 stock_files = sorted(glob('data/stocks*.csv')),譯文里沒(méi)用 stocks*哮兰,用的是 stocks?毛萌,這是因?yàn)?data 目錄里還有一個(gè)叫 stocks.csv 的文件,如果用 *喝滞,會(huì)讀取出 4 個(gè)文件阁将,而不是原文中的 3 個(gè)文件。

生成的 DataFrame 索引有重復(fù)值囤躁,見 “0冀痕、1、2”狸演。為避免這種情況言蛇,要在 concat() 函數(shù)里用忽略舊索引、重置新索引的參數(shù)宵距,ignore_index = True腊尚。

10. 用多個(gè)文件建立 DataFrame ~ 按列

上個(gè)技巧按行合并數(shù)據(jù)集,但是如果多個(gè)文件包含不同的列满哪,該怎么辦婿斥?

本例將 drinks 數(shù)據(jù)集分為了兩個(gè) CSV 文件劝篷,每個(gè)文件都包含 3 列。

與上例一樣民宿,還是使用 glob()娇妓。

這里要讓 concat() 函數(shù)按列合并,axis='columns活鹰。

現(xiàn)在 drinks 有 6 列啦哈恰!

11. 從剪貼板創(chuàng)建 DataFrame

想快速把 Excel 或別的表格軟件里存儲(chǔ)的數(shù)據(jù)讀取為 DataFrame,用 read_clipboard() 函數(shù)志群。

打開要復(fù)制的 Excel 文件着绷,選取內(nèi)容,復(fù)制锌云。

read_csv() 函數(shù)類似荠医,read_clipboard() 會(huì)自動(dòng)檢測(cè)列名與每列的數(shù)據(jù)類型。

真不錯(cuò)桑涎! pandas 自動(dòng)把第一列當(dāng)設(shè)置成索引了彬向。

注意:因?yàn)椴荒軓?fù)用、重現(xiàn)石洗,不推薦在正式代碼里使用 read_clipboard() 函數(shù)幢泼。

12. 把 DataFrame 分割為兩個(gè)隨機(jī)子集

把 DataFrame 分為兩個(gè)隨機(jī)子集紧显,一個(gè)占 75% 的數(shù)據(jù)量讲衫,另一個(gè)是剩下的 25%。

Movies 為例孵班,該數(shù)據(jù)有 979 條記錄涉兽。

使用 sample()方法隨機(jī)選擇 75% 的記錄,并將之賦值給 moives_1篙程。

使用 drop() 方法刪掉 movies 里所有 movies_1枷畏,并將之賦值給 movies_2

兩個(gè) DataFrame 的行數(shù)之和與 movies 一致虱饿。

movies_1movies_2 里的每個(gè)索引值都來(lái)自于 movies拥诡,而且互不重復(fù)。

注意:如果索引值有重復(fù)氮发、不唯一渴肉,這種方式會(huì)失效。

13. 根據(jù)多個(gè)類別篩選 DataFrame

預(yù)覽 movies爽冕。

查看 genre(電影類型)列仇祭。

要是想篩選 Action(動(dòng)作片)、Drama(劇情片)颈畸、Western(西部片)乌奇,可以用 or 的操作符實(shí)現(xiàn)多條件篩選没讲。

不過(guò),用 isin() 方法篩選會(huì)更清晰礁苗,只要傳遞電影類型的列表就可以了爬凑。

如果想反選,可在條件前添加一個(gè)波浪符(tilde ~)试伙。

14. 根據(jù)最大的類別篩選 DataFrame

篩選電影類別里(genre)數(shù)量最多的三類電影贰谣。

先用 value_counts() 統(tǒng)計(jì)各類電影的數(shù)量,把統(tǒng)計(jì)結(jié)果賦值給 counts迁霎,這個(gè)結(jié)果是 Series吱抚。

使用 Seriesnlargest 方法,可以輕松選出 Series 里最大的三個(gè)值考廉。

這里所需的只是這個(gè) Series 的 index秘豹。

把這個(gè) index 傳遞給 isin()

最終昌粤,這個(gè) DataFrame 里就只剩下了劇情片既绕、喜劇片與動(dòng)作片。

15. 處理缺失值

本例使用目擊 UFO 數(shù)據(jù)集涮坐。

可以看到凄贩,這個(gè)數(shù)據(jù)集里有缺失值。

要查看每列有多少缺失值袱讹,可以使用 isna() 方法疲扎,然后使用 sum()函數(shù)。

isna() 生成一個(gè)由 TrueFalse 構(gòu)成的 DataFrame捷雕,sum()True 轉(zhuǎn)換為 1椒丧, 把 False 轉(zhuǎn)換為 0。

還可以用 mean() 函數(shù)救巷,計(jì)算缺失值占比壶熏。

dropna() 刪除列里的所有缺失值。

只想刪除列中缺失值高于 10% 的缺失值浦译,可以設(shè)置 dropna() 里的閾值棒假,即 threshold.

16. 把字符串分割為多列

創(chuàng)建一個(gè) DataFrame 示例。

把姓名列分為姓與名兩列精盅,用 str.split() 方法帽哑,按空格分割,并用 expand 關(guān)鍵字渤弛,生成一個(gè)新的 DataFrame祝拯。

通過(guò)賦值語(yǔ)句,把這兩列添加到原 DataFrame。

如果想分割字符串佳头,但只想保留分割結(jié)果的一列鹰贵,該怎么操作?

要是只想保留城市列康嘉,可以選擇只把城市加到 DataFrame 里碉输。

17. 把 Series 里的列表轉(zhuǎn)換為 DataFrame

創(chuàng)建一個(gè) DataFrame 示例。

這里包含了兩列亭珍,第二列包含的是 Python 整數(shù)列表敷钾。

要把第二列轉(zhuǎn)為 DataFrame,在第二列上使用 apply() 方法肄梨,并把結(jié)果傳遞給 Series 構(gòu)建器阻荒。

concat() 函數(shù),把原 DataFrame 與新 DataFrame 組合在一起众羡。

18. 用多個(gè)函數(shù)聚合

先看一下 Chipotle 連鎖餐館的 DataFrame侨赡。

每個(gè)訂單都有訂單號(hào)(order_id),每個(gè)訂單有多行粱侣。要統(tǒng)計(jì)每個(gè)訂單的金額羊壹,需要先根據(jù)每個(gè) order_id 匯總每個(gè)訂單里各個(gè)產(chǎn)品(item_price)的金額。下面的例子列出了訂單號(hào)為 1 的總價(jià)齐婴。

計(jì)算每單的總價(jià)油猫,要按 order_id 進(jìn)行 groupby() 分組,再按 item_price 計(jì)算每組的總價(jià)柠偶。

有時(shí)情妖,要用多個(gè)聚合函數(shù),不一定只是 sum() 一個(gè)函數(shù)嚣州。這時(shí)鲫售,要用 agg() 方法共螺,把多個(gè)聚合函數(shù)的列表作為該方法的參數(shù)该肴。

上列就算出了每個(gè)訂單的總價(jià)與訂單里的產(chǎn)品數(shù)量。

19. 用一個(gè) DataFrame 合并聚合的輸出結(jié)果

本例用的還是 orders藐不。

如果想新增一列匀哄,為每行列出訂單的總價(jià),要怎么操作雏蛮?上面介紹過(guò)用 sum() 計(jì)算總價(jià)涎嚼。

sum() 是聚合函數(shù),該函數(shù)返回結(jié)果的行數(shù)(1834行)比原始數(shù)據(jù)的行數(shù)(4622行)少挑秉。

要解決這個(gè)問(wèn)題得用 transform() 方法法梯,這個(gè)方法執(zhí)行同樣的計(jì)算,但返回與原始數(shù)據(jù)行數(shù)一樣的輸出結(jié)果,本例中為 4622 行立哑。

接下來(lái)夜惭,為 DataFrame 新增一列,total_price铛绰。

如上所示诈茧,每一行都列出了對(duì)應(yīng)的訂單總價(jià)。

這樣一來(lái)捂掰,計(jì)算每行產(chǎn)品占訂單總價(jià)的百分比就易如反掌了敢会。

20. 選擇行與列

本例使用大家都看膩了的泰坦尼克數(shù)據(jù)集。

這個(gè)數(shù)據(jù)集包括了泰坦尼克乘客的基本信息以及是否逃生的數(shù)據(jù)这嚣。

describe() 方法鸥昏,可以得到該數(shù)據(jù)集的基本統(tǒng)計(jì)數(shù)據(jù)。

這個(gè)結(jié)果集顯示的數(shù)據(jù)很多姐帚,但不一定都是你需要的互广,可能只需要其中幾行。

還可以只選擇部分列卧土。

21. 重塑多重索引 Series

泰坦尼克數(shù)據(jù)集里有一列標(biāo)注了幸存(Survived)狀態(tài)惫皱,值用 0、1 代表尤莺。計(jì)算該列的平均值可以計(jì)算整體幸存率旅敷。

性別(Sex)統(tǒng)計(jì)男女的幸存率,需要使用 groupby()颤霎。

要按性別艙型(Pclass)統(tǒng)計(jì)幸存率媳谁,就要按性別與艙型進(jìn)行 groupby()

上面顯示了不同性別友酱,不同艙型的幸存率晴音,輸出結(jié)果是一個(gè)多重索引的序列(Series),這種形式與實(shí)際數(shù)據(jù)相比多了多重索引缔杉。

這種表現(xiàn)形式不利于閱讀锤躁,也不方便實(shí)現(xiàn)數(shù)據(jù)交互,用 unstack() 把多重索引轉(zhuǎn)換為 DataFrame 更方便或详。

這個(gè) DataFrame 包含的數(shù)據(jù)與多重索引序列一模一樣系羞,只是可以用大家更熟悉的 DataFrame 方法進(jìn)行操控。

22. 創(chuàng)建透視表

經(jīng)常輸出類似上例的 DataFrame霸琴,pivot_table() 方法更方便椒振。

使用透視表,可以直接指定索引梧乘、數(shù)據(jù)列澎迎、值與聚合函數(shù)。

設(shè)置 margins=True,即可為透視表添加行與列的匯總夹供。

此表顯示了整體幸存率辑莫,及按性別與艙型劃分的幸存率。

把聚合函數(shù) mean 改為 count罩引,就可以生成交叉表各吨。

這里顯示了每個(gè)類別的記錄數(shù)。

23. 把連續(xù)型數(shù)據(jù)轉(zhuǎn)換為類型數(shù)據(jù)

下面看一下泰坦尼克數(shù)據(jù)集的年齡(Age)列袁铐。

這一列是連續(xù)型數(shù)據(jù)揭蜒,如果想把它轉(zhuǎn)換為類別型數(shù)據(jù)怎么辦?

這里可以用 cut 函數(shù)把年齡劃分為兒童剔桨、青年屉更、成人三個(gè)年齡段。

這段代碼為不同分箱提供了標(biāo)簽洒缀,年齡在 0-18 歲的為兒童瑰谜,18-25 歲的為青年,25-99 歲的為成人树绩。

注意:現(xiàn)在數(shù)據(jù)已經(jīng)是類別型了萨脑,類別型數(shù)據(jù)會(huì)自動(dòng)排序。

24. 改變顯示選項(xiàng)

接下來(lái)還是看泰坦尼克數(shù)據(jù)集饺饭。

年齡列有 1 位小數(shù)渤早,票價(jià)列有 4 位小數(shù),如何將這兩列顯示的小數(shù)位數(shù)標(biāo)準(zhǔn)化瘫俊?

用以下代碼讓這兩列只顯示 2 位小數(shù)鹊杖。

第一個(gè)參數(shù)是要設(shè)置的選項(xiàng)名稱,第二個(gè)參數(shù)是 Python 的字符串格式扛芽。

現(xiàn)在年齡與票價(jià)列為 2 位小數(shù)了骂蓖。

注意:這種操作不改變底層數(shù)據(jù),只改變數(shù)據(jù)的顯示形式川尖。

還可以用以下代碼重置數(shù)據(jù)顯示選項(xiàng)登下。

pd.reset_option('display.float_format')

注意:使用同樣的方式,還可以設(shè)置更多選項(xiàng)空厌。

25. 設(shè)置 DataFrame 樣式

上面的技巧適用于調(diào)整整個(gè) Jupyter Notebook 的顯示內(nèi)容庐船。

不過(guò),要想為某個(gè) DataFrame 設(shè)定指定的樣式嘲更,pandas 還提供了更靈活的方式。

下面看一下 stocks揩瞪。

創(chuàng)建樣式字符字典赋朦,指定每列使用的格式。

把這個(gè)字典傳遞給 DataFrame 的 style.format() 方法。

注意:日期是月-日-年的格式宠哄,閉市價(jià)有美元符壹将,交易量有千分號(hào)。

接下來(lái)用鏈?zhǔn)椒椒▽?shí)現(xiàn)更多樣式毛嫉。

可以看到诽俯,這個(gè)表隱藏了索引,閉市價(jià)最小值用紅色顯示承粤,最大值用淺綠色顯示暴区。

再看一下背景色漸變的樣式。

交易量(Volume)列現(xiàn)在按不同深淺的藍(lán)色顯示辛臊,一眼就能看出來(lái)數(shù)據(jù)的大小仙粱。

下面看最后一個(gè)例子。

本例的 DataFrame 加上了標(biāo)題彻舰,交易量列使用了迷你條形圖伐割。

注意:Pandas 還支持更多 DataFrame 樣式選項(xiàng),詳見 pandas 官方文檔刃唤。

彩蛋:預(yù)覽 DataFrame

假如剛拿到一個(gè)數(shù)據(jù)集隔心,想快速了解該數(shù)據(jù)集,又不想費(fèi)勁折騰怎么辦尚胞?這里介紹一個(gè)獨(dú)立的支持庫(kù)济炎,pandas_profiling,可以快速預(yù)覽數(shù)據(jù)集辐真。

第一步须尚,安裝, pip install pandas-profiling

第二步侍咱,導(dǎo)入耐床,import pandas_profiling

本例簡(jiǎn)單介紹一下 ProfileReport() 函數(shù),這個(gè)函數(shù)支持任意 DataFrame楔脯,并生成交互式 HTML 數(shù)據(jù)報(bào)告:

  • 第一部分是縱覽數(shù)據(jù)集撩轰,還會(huì)列出數(shù)據(jù)一些可能存在的問(wèn)題;
  • 第二部分匯總每列數(shù)據(jù)昧廷,點(diǎn)擊 toggle details 查看更多信息堪嫂;
  • 第三部分顯示列之間的關(guān)聯(lián)熱力圖;
  • 第四部分顯示數(shù)據(jù)集的前幾條數(shù)據(jù)木柬。

英文版 Jupyter Notebook 鏈接:
https://nbviewer.jupyter.org/github/justmarkham/pandas-videos/blob/master/top_25_pandas_tricks.ipynb

中文版 Jupyter Notebook 鏈接:
https://github.com/jaystone776/pandas_answered/blob/master/25_Pandas_Tips_by_PyCon_Master.ipynb

數(shù)據(jù)集下載:
https://github.com/jaystone776/pandas_answered/blob/master/data/25_Pandas_Tips_by_PyCon_Master_data.zip

Kevin Markham - My top 25 pandas tricks 英文版視頻:

鏈接:
https://pan.baidu.com/s/1HDgOfG5yd_FuQag-Wsr-Bw
提取碼:vqup

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皆串,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子眉枕,更是在濱河造成了極大的恐慌恶复,老刑警劉巖怜森,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谤牡,居然都是意外死亡副硅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門翅萤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恐疲,“玉大人,你說(shuō)我怎么就攤上這事套么∨嗉海” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵违诗,是天一觀的道長(zhǎng)漱凝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诸迟,這世上最難降的妖魔是什么茸炒? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮阵苇,結(jié)果婚禮上壁公,老公的妹妹穿的比我還像新娘。我一直安慰自己绅项,他們只是感情好紊册,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著快耿,像睡著了一般囊陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掀亥,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天撞反,我揣著相機(jī)與錄音,去河邊找鬼搪花。 笑死遏片,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撮竿。 我是一名探鬼主播吮便,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼幢踏!你這毒婦竟也來(lái)了髓需?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惑折,失蹤者是張志新(化名)和其女友劉穎授账,沒(méi)想到半個(gè)月后枯跑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惨驶,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡白热,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粗卜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屋确。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖续扔,靈堂內(nèi)的尸體忽然破棺而出攻臀,到底是詐尸還是另有隱情,我是刑警寧澤纱昧,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布刨啸,位于F島的核電站,受9級(jí)特大地震影響识脆,放射性物質(zhì)發(fā)生泄漏设联。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一灼捂、第九天 我趴在偏房一處隱蔽的房頂上張望离例。 院中可真熱鬧,春花似錦悉稠、人聲如沸宫蛆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耀盗。三九已至,卻和暖如春卦尊,著一層夾襖步出監(jiān)牢的瞬間叛拷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工猫牡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胡诗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓淌友,卻偏偏與公主長(zhǎng)得像煌恢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子震庭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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