2018-06-15 開胃學(xué)習(xí)Data系列 - Pandas 基礎(chǔ)2

溫故知新總結(jié):

  1. 任何更改在處理的DataFrame净赴, 可能會對最初使用的基本DataFrame產(chǎn)生影響火诸。
  2. 換句話說:明確地使用一個(gè)副本该窗, 那么應(yīng)該首先考慮在DataFrame上調(diào)用copy方法酌心。
  3. 可以通過使用skiprows參數(shù)來做到讓Pandas去忽略由數(shù)字組成的第一行。
  4. 使用 rename 更改 col 名字挑豌,并使用 inplace屬性










Dataframe Indexing and Loading


常見的工作流程是將數(shù)據(jù)讀入DataFrame安券, 然后將該DataFrame減少到有興趣處理的特定的列(column) 或行(row)墩崩。Pandas的工具組試圖給 DataFrame的視圖。這是比復(fù)制資料快得多侯勉,和更有效率的使用記憶體鹦筹。但是它意味著, 任何更改在處理的DataFrame址貌, 可能會對最初使用的基本DataFrame產(chǎn)生影響铐拐。

以下是使用相同的采購DataFrame的例子×范裕可以使用方括號創(chuàng)建一個(gè)列表遍蟋,只查看cost類別∶荆可以通過(broadcasting)來增加這個(gè)列表里的費(fèi)用虚青。對比原來的DataFrame,新的費(fèi)用也增加了螺男。

這是值得注意的重要考慮因素棒厘。如果要明確地使用一個(gè)副本蹄葱, 那么應(yīng)該首先考慮在DataFrame上調(diào)用copy方法醇坝。




通常的工作流程是讀取一些外部的文件數(shù)據(jù)集惭缰。使用這些dictionary來創(chuàng)建一個(gè)Pandas的DataFrame端三。Pandas有內(nèi)置的支持情萤,對于 例如分隔文件(如.CSV文件)以及各種 其他數(shù)據(jù)格式宾抓,包括關(guān)連資料庫零院,Excel和HTML表劳吠。

可以使用shell命令cat來查看這個(gè)文件迫筑∠芨希可以直接調(diào)用使用驚嘆號(!)

常識:當(dāng)Jupyter筆記本看到一行操作 以驚嘆號開始的時(shí),會將其余的命令發(fā)送到操作系統(tǒng)shell去進(jìn)行評估脯燃。所以cat可以運(yùn)行在Linux和Mac以及Coursera平臺上搂妻, 但可能無法在Windows上運(yùn)行。

這個(gè)是 olympics.csv的CSV文件辕棚, 其中包含維基百科的數(shù)據(jù)欲主,包含了獎(jiǎng)牌的總結(jié)列表, 關(guān)于各國在奧運(yùn)會贏得的逝嚎。

DataFrame中的第一行(row)數(shù)據(jù) 是我們希望看到的列名標(biāo)簽扁瓢。數(shù)據(jù)中的第一列(column)似乎也是國家的名稱, 我們想用它來做成索引(index)补君。重新導(dǎo)入數(shù)據(jù)引几,和設(shè)置索引值index_col為0,這是第一列挽铁, 并設(shè)置列的標(biāo)簽從第二行數(shù)據(jù)來讀取伟桅。

可以通過使用skiprows參數(shù)來做到讓Pandas去忽略由數(shù)字組成的第一行敞掘。

這些頁面沒有用金,銀和 銅牌楣铁,而是用一個(gè)漂亮的小圖標(biāo)玖雁,加上一個(gè)1,一個(gè)2盖腕, 另外一個(gè)3在里面赫冬。在我們的csv文件中,它們用字串01溃列!來表示 劲厌,02!我們看到列(column)的值被重復(fù)哭廉,這不是很好的做法脊僚。 Pandas認(rèn)識到這一點(diǎn),而附加了.1和.2遵绰,使標(biāo)簽更加獨(dú)特辽幌。但是這個(gè)標(biāo)簽并不是很清楚,所以我們應(yīng)該清理數(shù)據(jù)文件椿访∥谄螅可以使用Pandas name屬性設(shè)置列的名稱。

Pandas存儲所有列的列表在.columns屬性中成玫〖咏停可以通過遍歷該列表來更改列名的值, 使用dataframe的rename方法哭当。

在這里猪腕,我們只是遍歷所有列的值,看看它們是否 以01钦勘,02陋葡,03或數(shù)字符開始。如果他們是彻采,我們可以呼叫rename函數(shù)腐缤, 并將列參數(shù)設(shè)置為dictionary,用的key是我們要替換的column肛响, value是我們想要的新值岭粤。

這里我們把一些舊的值分成兩部分, 因?yàn)槲覀儾幌胧ノㄒ坏母郊又怠?br> 我們還會將非常重要的inplace參數(shù)設(shè)為true特笋, 以便Pandas知道直接更新此DataFrame剃浇。










Querying a DataFrame


boolean masking 是NumPy快速高效查詢的核心。它類似于在其他計(jì)算領(lǐng)域使用的masking。

boolean masking 是一個(gè)陣列(atrray)偿渡,它可以是一維度像一個(gè)列表(series)臼寄,或者 二維度像DataFrame這樣的霸奕,array中的每個(gè)值都是true或false溜宽。這個(gè)array基本上覆蓋在我們查詢的數(shù)據(jù)結(jié)構(gòu)之上。任何單元格與true都將被允許進(jìn)入我們的最終結(jié)果质帅, 任何單元格與false對齊的就不能夠适揉。

boolean masking 在概念上是強(qiáng)大的, 是高效的NumPy和Pandas查詢的基石煤惩。這種技術(shù)在計(jì)算機(jī)科學(xué)的其他領(lǐng)域中被廣泛使用嫉嘀, 例如圖形學(xué)。但是在其他傳統(tǒng)的關(guān)連資料庫中并沒有類似的魄揉。創(chuàng)建boolean masking 通過將操作符直接應(yīng)用于Pandas列表或 DataFrame對象剪侮。

例如,在我們的奧運(yùn)數(shù)據(jù)集中洛退,您可能只想看到 在夏季奧運(yùn)會上獲得金牌的國家瓣俯。要構(gòu)建此查詢的布林遮罩,我們投影金牌('Gold')列兵怯,使用索引運(yùn)算符彩匕, 并應(yīng)用比較值為大于零(>0)的運(yùn)算符。這實(shí)際上是廣播比較(comparison)運(yùn)算符媒区, 大于(>)驼仪,其結(jié)果為Boolean系列。所得到的是有索引的系列袜漩,每個(gè)單元格是True或 False绪爸,根據(jù)一個(gè)國家是否贏得了至少一枚金牌, 并且索引是國家名稱宙攻,

所以我們建立了boolean masking 奠货,然而這只是一半而已。接下來我們要做的是覆蓋該遮罩(mask)在DataFrame上粘优。

可以使用where函數(shù)來做到這一點(diǎn)仇味。 where函數(shù)將boolean masking作為條件,將其應(yīng)用于DataFrame或series雹顺, 并返回一個(gè)相同形狀的新DataFrame或series丹墨。我們將這個(gè)boolean masking應(yīng)用于我們的奧運(yùn)數(shù)據(jù)并創(chuàng)建一個(gè)DataFrame - 只有那些在夏季比賽中贏得金牌的國家。

產(chǎn)生的DataFrame保留了原始的索引嬉愧, 只保留了滿足條件的國家/地區(qū)的數(shù)據(jù)贩挣。
所有不符合條件的國家只有NaN數(shù)據(jù)。 大多數(shù)DataFrame內(nèi)置的統(tǒng)計(jì)功能忽略NaN的值。

如果我們用count()在only_gold DataFrame中王财, 有100個(gè)國家在夏季奧運(yùn)中獲得了金牌卵迂。
如果我們用count()在原始的df DataFrame, 有147個(gè)國家總數(shù)绒净。

通常我們想刪除那些沒有數(shù)據(jù)的行(row)见咒。為此可以使用dropna()功能」医可以選擇提供dropna()應(yīng)該考慮的軸(axis)改览。請記住,軸只是指示列(column)或行(row)缤言, 預(yù)設(shè)值為0宝当,這意味著行(row)。

這里是一個(gè)更簡潔的例子胆萧,說明如何查詢這個(gè)DataFrame庆揩。
這種方式查詢DataFrame時(shí),注意到?jīng)]有NaN跌穗。 Pandas自動(dòng)過濾掉沒有值的行订晌。

如果不習(xí)慣用布林(boolean)或位(bit)遮蔽來 減少數(shù)據(jù) 兩個(gè)boolean masking,當(dāng)進(jìn)行邏輯比較運(yùn)算瞻离,其輸出是 是另一個(gè)boolean masking腾仅。這意味著您可以鏈接一堆a(bǔ)nd/or語句 以創(chuàng)建更復(fù)雜的查詢,結(jié)果仍然是單個(gè)boolean masking套利。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末推励,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子肉迫,更是在濱河造成了極大的恐慌验辞,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喊衫,死亡現(xiàn)場離奇詭異跌造,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)族购,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門壳贪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人寝杖,你說我怎么就攤上這事违施。” “怎么了瑟幕?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵磕蒲,是天一觀的道長留潦。 經(jīng)常有香客問我,道長辣往,這世上最難降的妖魔是什么兔院? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮站削,結(jié)果婚禮上坊萝,老公的妹妹穿的比我還像新娘。我一直安慰自己钻哩,他們只是感情好屹堰,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著街氢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪睦袖。 梳的紋絲不亂的頭發(fā)上珊肃,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機(jī)與錄音馅笙,去河邊找鬼伦乔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛董习,可吹牛的內(nèi)容都是我干的烈和。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼皿淋,長吁一口氣:“原來是場噩夢啊……” “哼招刹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窝趣,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤疯暑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哑舒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妇拯,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年洗鸵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了越锈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膘滨,死狀恐怖甘凭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吏祸,我是刑警寧澤对蒲,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布钩蚊,位于F島的核電站,受9級特大地震影響蹈矮,放射性物質(zhì)發(fā)生泄漏砰逻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一泛鸟、第九天 我趴在偏房一處隱蔽的房頂上張望蝠咆。 院中可真熱鬧,春花似錦北滥、人聲如沸刚操。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菊霜。三九已至,卻和暖如春济赎,著一層夾襖步出監(jiān)牢的瞬間鉴逞,已是汗流浹背司训。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工构捡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壳猜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓统扳,卻偏偏與公主長得像喘帚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子闪幽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評論 2 361

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