Pandas 教程 — 篩選讓你動(dòng)心的電影(3)

了解了 DataFrame 之后垄分,我們開始對(duì)電影數(shù)據(jù)進(jìn)行篩選梅屉。

如果給你一個(gè) Excel 表格舞竿,最容易想到的就是篩選出這個(gè)表格的某幾行或某幾列搀捷,那么在Pandas 中如何做這種篩選呢,可以分為三種情況:

  • 按一行或多行篩選

使用非常好用的 loc( ) 函數(shù)其馏,可以按照索引進(jìn)行篩選

import pandas as pd

movie_pd = pd.read_csv('douban_movie.csv', header = 0, sep = '\t')
print movie_pd.loc[0]
print movie_pd.loc[range(10)]
print movie_pd.loc[[1, 3, 8]]

loc( ) 函數(shù)既可以傳入某個(gè)索引值盼铁,也可以傳入索引值的列表,一般情況下尝偎,DataFrame 的索引值是 0 ~ N-1 的數(shù)字 ( 其中 N 為 DataFrame的長(zhǎng)度 )。所以鹏控,loc[0] 查詢的其實(shí)是第一行的數(shù)據(jù)致扯,loc[range(10)] 查詢的是前 10 行的數(shù)據(jù),而 loc[[1, 3, 8]]則是跳著查詢第 2当辐、4抖僵、9 行的數(shù)據(jù)。

  • 按一列或多列篩選

按列篩選就比較簡(jiǎn)單了缘揪,不需要用到什么函數(shù)耍群,直接篩就可以,簡(jiǎn)單粗暴找筝。

比如說篩選電影數(shù)據(jù)的標(biāo)題 title 和 評(píng)分 score 中的一列或兩列:

print movie_pd['title']
print movie_pd[ ['title', 'score'] ]

  • 按一行一列或多行多列同時(shí)篩選

也是借助 loc( ) 函數(shù)蹈垢,但這個(gè)時(shí)候需要通過傳入兩個(gè)參數(shù)。

print movie_pd.loc[5, 'actors']
print movie_pd.loc[[1, 5, 8], ['title', 'actors'] ]

loc[5, 'actors'] 表示篩選出索引值是 5 的行袖裕,且列名是 actors 的列曹抬。

loc[[1, 5, 8], ['title', 'actors'] ] 表示篩選出索引值是 1、5急鳄、8 的行谤民,且列名是 title 和 actors 的列堰酿。

這種篩選看起來還是挺簡(jiǎn)單的,那么問題來了张足,請(qǐng)問以下兩種寫法有什么區(qū)別触创。。为牍。

print movie_pd['title']
print movie_pd[['title']]

一會(huì)一對(duì)中括號(hào)哼绑,一會(huì)兩對(duì)中括號(hào),傻傻分不清吵聪,當(dāng)年我也是糾結(jié)了好久凌那。

其實(shí),這涉及到了 Pandas 中的另一種數(shù)據(jù)類型:Series吟逝,我們先來直觀感受一下:

print type(movie_pd['title'])
print type(movie_pd[['title']])

輸出結(jié)果如下:

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>

帶有一個(gè)中括號(hào)的類型是 Series帽蝶,帶有兩個(gè)中括號(hào)的類型是 DataFrame

之前提到過 DataFrame 類似于 Excel 中的表块攒,那么 Series 就是 Excel 表中的某一行或某一列的數(shù)據(jù)類型励稳,多個(gè)有相同索引的 Series 就可以組成一個(gè) DataFrame

Series 類似于 Python 中的列表囱井,和 DataFrame 一樣有索引和值驹尼,基本使用如下:

temp_series = pd.Series([1, 4, 6, 10], name = 'simple_count')
print temp_series
print temp_series.index
print temp_series.values

輸出結(jié)果如下:

0     1
1     4
2     6
3    10
Name: simple_count, dtype: int64
RangeIndex(start=0, stop=4, step=1)
[ 1  4  6 10]

pd.Series ( ) 中可以傳入一個(gè)列表進(jìn)去,name 是 Series 本身的一個(gè)屬性庞呕,index 表示索引新翎,values 表示對(duì)應(yīng)的值。

所以住练,movie_pd['title'] 返回的是 name 屬性值為 title 的 Series地啰,和 DataFrame 沒有任何聯(lián)系了;而 movie_pd[['title']] 返回的是列名為 title 的 DataFrame讲逛。

當(dāng)需要單獨(dú)對(duì)某一行或某一列進(jìn)行運(yùn)算時(shí)亏吝,才會(huì)使用一對(duì)中括號(hào)的方式。

除了按行或按列篩選盏混,還可以按照一個(gè)或多個(gè)條件對(duì)數(shù)據(jù)進(jìn)行篩選:

# 篩選電影類型是劇情的 title 和 score 兩列
print movie_pd[ movie_pd['category'] == '劇情' ][['title', 'score']]

# 篩選電影排名小于等于 5 且評(píng)分高于 9.0 的 title 一列
print movie_pd[ (movie_pd['rank'] <=5) & (movie_pd['score'] > 9.0) ][['title']]

# 篩選電影發(fā)布日期大于 2010-01-01 或 評(píng)論數(shù)超過 50萬 的所有列
print movie_pd[ (movie_pd['release_date'] > '2010-01-01') | (movie_pd['vote_count'] > 500000) ]

& 表示多個(gè)條件同時(shí)滿足蔚鸥,類似于 and,| 表示多個(gè)條件滿足一個(gè)即可许赃,類似于 or止喷。

有時(shí)候還需要借助一些函數(shù)進(jìn)行篩選,比如:

isnull ( ) 函數(shù):篩選空值

notnull ( ) 函數(shù):篩選非空值

isin( ) 函數(shù):篩選某個(gè)字段的值在給定列表中

print movie_pd[ movie_pd['url'].isnull() ]
print movie_pd[ movie_pd['regions'].notnull() ]
print movie_pd[ movie_pd['score'].isin([8.0, 9.0, 9.5]) ]

講了這么多混聊,該你自己動(dòng)手實(shí)踐启盛,去篩選喜歡的電影了。

劃重點(diǎn)

  • loc( ) 按照索引篩選數(shù)據(jù)
  • Series DataFrame 中某一行或某一列的數(shù)據(jù)類型
  • & 和 | 多條件篩選時(shí) 同時(shí)滿足 和 只滿足其一即可
  • isnull( ) 空值、notnull( ) 非空值僵闯、isin( ) 值在給定列表中
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卧抗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鳖粟,更是在濱河造成了極大的恐慌社裆,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件向图,死亡現(xiàn)場(chǎng)離奇詭異泳秀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)榄攀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門嗜傅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人檩赢,你說我怎么就攤上這事吕嘀。” “怎么了贞瞒?”我有些...
    開封第一講書人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵偶房,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我军浆,道長(zhǎng)棕洋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任乒融,我火速辦了婚禮掰盘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赞季。我一直安慰自己愧捕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開白布碟摆。 她就那樣靜靜地躺著,像睡著了一般叨橱。 火紅的嫁衣襯著肌膚如雪典蜕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評(píng)論 1 314
  • 那天罗洗,我揣著相機(jī)與錄音愉舔,去河邊找鬼。 笑死伙菜,一個(gè)胖子當(dāng)著我的面吹牛轩缤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼火的,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼壶愤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起馏鹤,我...
    開封第一講書人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤征椒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后湃累,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勃救,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年治力,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒙秒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宵统,死狀恐怖晕讲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榜田,我是刑警寧澤益兄,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站箭券,受9級(jí)特大地震影響净捅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辩块,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一蛔六、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧废亭,春花似錦国章、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掌动,卻和暖如春四啰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粗恢。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工浪秘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儿奶,地道東北人题篷。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓雕沿,卻偏偏與公主長(zhǎng)得像佛掖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子涌庭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361

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