Pandas 教程 — 電影數(shù)據(jù)是干凈的嗎(1)

分析電影數(shù)據(jù)之前初茶,先來檢查一下數(shù)據(jù)的質(zhì)量卷拘,包括是否有空值喊废、重復(fù)值、異常值栗弟。

import pandas as pd

movie_pd = pd.read_csv('douban_movie.csv', header=0, sep='\t')
print movie_pd.info()
print movie_pd.describe()

movie_pd.info( ) 輸出結(jié)果如下:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3688 entries, 0 to 3687
Data columns (total 16 columns):
actor_count     3688 non-null int64
actors          3688 non-null object
category        3688 non-null object
cover_url       3688 non-null object
id              3688 non-null int64
is_playable     3688 non-null bool
is_watched      3688 non-null bool
rank            3688 non-null int64
rating          3688 non-null object
regions         3688 non-null object
release_date    3688 non-null object
score           3688 non-null float64
title           3688 non-null object
types           3688 non-null object
url             3688 non-null object
vote_count      3688 non-null int64
dtypes: bool(2), float64(1), int64(4), object(9)

可以看出,共有 3688 行電影數(shù)據(jù)工闺,所有字段均沒有空值乍赫。

movie_pd.describe ( ) 會(huì)統(tǒng)計(jì)數(shù)值型變量,輸出結(jié)果如下:

   actor_count            id         rank        score     vote_count
count  3688.000000  3.688000e+03  3688.000000  3688.000000    3688.000000
mean      8.418655  3.655456e+06   124.189534     8.522587   71773.012744
std       6.067463  6.095063e+06   116.329492     0.394342  119190.948797
min       0.000000  1.291543e+06     1.000000     7.300000     305.000000
25%       4.000000  1.296384e+06    36.000000     8.300000    3513.000000
50%       7.000000  1.307067e+06    87.000000     8.500000   15786.000000
75%      12.000000  2.150085e+06   177.000000     8.800000   85188.000000
max      54.000000  2.710254e+07   534.000000     9.700000  875424.000000

actor_count 的最小值是 0陆蟆,說明有些電影在豆瓣中沒有列出演員雷厂;rank 的最小值是 1 、最大值是 534叠殷;score 的最低分是 7.3改鲫,最高分是 9.7,看起來也沒有問題林束。

再來研究一下分類型變量像棘,比如 types 字段,先挑幾個(gè)看看:

print movie_pd[['id', 'types']][1000:1006]

輸出如下:

        id             types
1000   1299026      [劇情, 歷史, 犯罪]
1001   1292996      [劇情, 驚悚, 犯罪]
1002   1768214      [劇情, 犯罪, 懸疑]
1003   1421742      [劇情, 懸疑, 犯罪]
1004  10455077      [劇情, 犯罪, 懸疑]
1005   1306987  [劇情, 懸疑, 驚悚, 犯罪]

幾乎每部電影都屬于多個(gè)類型壶冒,但實(shí)際上在抓取數(shù)據(jù)的時(shí)候缕题,是按照每個(gè)分類單獨(dú)抓的,所以可能存在某些優(yōu)秀的電影 (在各個(gè)分類中排名都比較靠前) 會(huì)在不同的分類中多次被抓到胖腾,我們來驗(yàn)證一下烟零。

找出 id 為 10455077 的所有電影:

print movie_pd[ movie_pd['id'] == 10455077 ][['types','category', 'rank']]

輸出的結(jié)果中有兩條紀(jì)錄:

        types         category    rank
752   [劇情, 犯罪, 懸疑]       懸疑      128
1004  [劇情, 犯罪, 懸疑]       犯罪      214

可見,該部電影在懸疑片中排名 128咸作,在犯罪片中排名 214锨阿,但在劇情片中并未上榜。

多驗(yàn)證幾部電影后發(fā)現(xiàn)记罚,確實(shí)如此墅诡,一部電影可能被抓取多次,除了category ( 某個(gè)類別 ) 和 rank ( 在當(dāng)前類別的排名 ) 兩個(gè)字段不同之外毫胜,同一個(gè)電影的其他字段值均是相同的书斜,所以需要對數(shù)據(jù)進(jìn)行去重處理诬辈。

Pandas 中刪除數(shù)據(jù)使用 drop( ) 函數(shù)

  • 按列刪除,需要設(shè)置 axis 值為 1
new_movie_pd = movie_pd.drop(['category', 'rank'], axis = 1)

刪除 movie_pd 中的 category荐吉、rank 兩列焙糟,axis = 1 表示按列刪除

  • 按行刪除:一般先獲取到需要?jiǎng)h除數(shù)據(jù)的索引,然后根據(jù)索引刪除
drop_indexes = movie_pd[ movie_pd['regions'] == '[意大利]' ].index
new_movie_pd = movie_pd.drop(drop_indexes)

比如要?jiǎng)h除 regions 為 ['意大利'] 的數(shù)據(jù)样屠,先通過 index 找到索引穿撮,然后再做刪除的操作,axis =0 為默認(rèn)值痪欲,表示按行刪除悦穿,不需要賦值。

Pandas 中去重使用 drop_duplicates( ) 函數(shù)业踢,和刪除數(shù)據(jù)結(jié)合起來栗柒,最終對電影數(shù)據(jù)的去重操作如下:

new_movie_pd = movie_pd.drop(['category', 'rank'], axis = 1)
new_movie_pd = new_movie_pd.drop_duplicates()

因?yàn)槊坎侩娪暗?id 字段值是唯一的,所以可以驗(yàn)證一下去重是否成功:

print len(new_movie_pd)
print new_movie_pd['id'].nunique()

輸入結(jié)果如下:

2163
2152

nunique( ) 函數(shù)直接返回 id 去重后的個(gè)數(shù)知举,等價(jià)于 len(new_movie_pd['id'].unique( ))瞬沦,即先對id去重,然后求個(gè)數(shù)雇锡。

可見逛钻,去重后的數(shù)據(jù)存在有些電影重復(fù)出現(xiàn)的情況,否則電影的行數(shù)和 id 去重后的個(gè)數(shù)是相等的锰提。通過如下操作可以找出這些電影的 id:

movie_count = new_movie_pd.groupby('id').size().reset_index(name='count')
print movie_count[ movie_count['count'] > 1 ]

輸出結(jié)果如下:

       id      count
34     1291832      2
40     1291843      2
112    1292287      2
172    1292720      2
183    1292849      2
272    1293544      2
938    1306029      2
1292   1477448      2
1305   1485260      2
2124  26607693      2
2130  26683290      2

groupby 的使用之后會(huì)介紹曙痘,這里先略過,意思是通過 id 分組后計(jì)算每個(gè)電影出現(xiàn)的次數(shù)立肘,類似于 SQL 中的 這個(gè)操作:

select id, count(1) as num
from movie
group by id
having num > 1

挑一個(gè)電影 id 看看:

print new_movie_pd[ new_movie_pd['id'] == 1291832 ]

其中注意到 vote_count 字段:

vote_count
  329191
  329192

vote_count 評價(jià)人數(shù)不同边坤,考慮到不同分類的電影抓取是有先后順序的,某個(gè)類型既是劇情又是懸疑的電影赛不,在 劇情 分類下抓取時(shí)可能有 329191 個(gè)人評價(jià)惩嘉,而之后在 懸疑 分類下抓取的時(shí)候已經(jīng)多了個(gè)人評價(jià),變成了329192 踢故,所以去重的同時(shí)需要暫時(shí)刪除 vote_count 字段文黎。

劃重點(diǎn)

  • drop( ) 按照列名 或 索引 刪除數(shù)據(jù)
  • drop_duplicates( ) 刪除重復(fù)數(shù)據(jù)
  • nunique( ) 返回某個(gè)字段去重后的個(gè)數(shù)
  • unique( ) 對某個(gè)字段去重
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市殿较,隨后出現(xiàn)的幾起案子耸峭,更是在濱河造成了極大的恐慌,老刑警劉巖淋纲,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳闹,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)本涕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門业汰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菩颖,你說我怎么就攤上這事样漆。” “怎么了晦闰?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵放祟,是天一觀的道長。 經(jīng)常有香客問我呻右,道長跪妥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任声滥,我火速辦了婚禮眉撵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘落塑。我一直安慰自己执桌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布芜赌。 她就那樣靜靜地躺著,像睡著了一般伴逸。 火紅的嫁衣襯著肌膚如雪缠沈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天错蝴,我揣著相機(jī)與錄音洲愤,去河邊找鬼。 笑死顷锰,一個(gè)胖子當(dāng)著我的面吹牛柬赐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播官紫,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肛宋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了束世?” 一聲冷哼從身側(cè)響起酝陈,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎毁涉,沒想到半個(gè)月后沉帮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年穆壕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了待牵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喇勋,死狀恐怖缨该,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茄蚯,我是刑警寧澤压彭,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站渗常,受9級特大地震影響壮不,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皱碘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一询一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癌椿,春花似錦健蕊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至都办,卻和暖如春嫡锌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琳钉。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工势木, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歌懒。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓啦桌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親及皂。 傳聞我的和親對象是個(gè)殘疾皇子甫男,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355