pandas 庫簡介

上周分享了數(shù)據(jù)分析用到的一個庫:Numpy 庫坟桅,今天分享一個比 Numpy 更高效的庫:pandas,它可以對數(shù)據(jù)進行導(dǎo)入蕊蝗、清洗仅乓、處理、統(tǒng)計和輸出匿又。pandas 是基于 Numpy 庫的,可以說建蹄,pandas 庫就是為數(shù)據(jù)分析而生的碌更。

環(huán)境

語言:Python 3.6

安裝&導(dǎo)入

用 pip 命令快速安裝 pandas 庫。

pip install pandas

安裝完后再編輯器中導(dǎo)入洞慎。

import pandas as pd

讀取文件

讀取你的 excel 文件痛单,并另存為 csv 格式的文件。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('test.xlsx'))
df.to_csv('test1.csv')
print(df)

讀取過程中可能會報錯劲腿,提示你缺少 xlrd 模塊的情況旭绒,用 pip 命令安裝即可。

打印出讀取到的數(shù)據(jù)焦人,我們發(fā)現(xiàn)挥吵,文件中單元格為空的數(shù)據(jù)以 NAN 代替了。

當然花椭,也可以直接讀取文件并打印忽匈,不給參數(shù)的話默認只打印前 5 行數(shù)據(jù)。以我之前爬取的熱門歌手文件為例矿辽。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
print(df.head(8))

打印結(jié)果如下:

  歌手名字  歌手ID
0  周杰倫  6452
1  陳奕迅  2116
2  薛之謙  5781
3  林俊杰  3684
4  李榮浩  4292
5  張學(xué)友  6460
6  楊宗緯  6066
7   許巍  5770

清洗數(shù)據(jù)

我們知道丹允,從事數(shù)據(jù)分析工作的,80% 的時間都花在數(shù)據(jù)清洗上面袋倔,因為我們從各個渠道獲取的信息格式不統(tǒng)一雕蔽,我們需要對他們進行清洗。

清洗數(shù)據(jù)主要內(nèi)容如下:

  • 刪除 DataFrame 中的不必要列和行宾娜。

  • 重命名 columns 為一組更易識別的標簽批狐。

  • 更改數(shù)據(jù)格式。

  • 去除數(shù)據(jù)間空格或者特定字符前塔。

  • 去除重復(fù)的行贾陷。

  • 查找空值。

刪除行或者列

我們還是以剛才歌手信息為例嘱根,為了看刪除效果髓废,我加了一列信息:性別,下面只顯示部分信息该抒。

  歌手名字  歌手ID 性別
0  周杰倫    6452   男
1  陳奕迅    2116   男
2  薛之謙    5781   男
3  林俊杰    3684   男
4  李榮浩    4292   男
5  張學(xué)友    6460   男
6  楊宗緯    6066   男
7   許巍     5770   男

刪除性別這一列慌洪。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
df1 = df.drop(columns=['性別'])
print(df1)

執(zhí)行后發(fā)現(xiàn)剛加的「性別」這一列已被刪除顶燕。

刪除某一行,比如刪除李榮浩這一行信息冈爹,我們通過上面可以知道這一行的 index 是 4涌攻。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
df1 = df.drop(index=['李榮浩'])
print(df1)

執(zhí)行后結(jié)果如下,我們發(fā)現(xiàn)频伤,index 為 4 的這一行信息已被刪除恳谎。

   歌手名字  歌手ID   性別 
0   周杰倫    6452    男
1   陳奕迅    2116    男
2   薛之謙    5781    男
3   林俊杰    3684    男
5   張學(xué)友    6460    男
6   楊宗緯    6066    男
7    許巍     5770    男
重命名列名

用 rename 方法將列名修改成自己需要的列名,比如歌手名字換成 SName憋肖。

import pandas as pd
from pandas import DataFrame, Series

df = DataFrame(pd.read_excel('歌手.xlsx'))
df.rename(columns={'歌手名字': 'SName'}, inplace=True)
print(df)
更改數(shù)據(jù)格式

用 astype 更改數(shù)據(jù)格式因痛。

df = DataFrame(pd.read_excel('歌手.xlsx'))
df1 = df['歌手ID'].astype('str')
刪除數(shù)據(jù)間空格
df = DataFrame(pd.read_excel('歌手.xlsx'))
df['歌手名字'] = df['歌手名字'].map(str.strip)  # 刪除左右兩邊空格
df['歌手名字'] = df['歌手名字'].map(str.lstrip)  # 刪除左邊空格
df['歌手名字'] = df['歌手名字'].map(str.rstrip)  # 刪除右邊空格

去除重復(fù)的行

用自帶的方法一行代碼可以搞定。

df = DataFrame(pd.read_excel('歌手.xlsx'))
df = df.drop_duplicates()
查找空值

我們可以用 isnull 方法查找數(shù)據(jù)中的空值或者 NAN岸更,返回的是 Boolean 類型鸵膏,F(xiàn)alse 表示不是空值藻肄,True 表示空值陋葡。

df = DataFrame(pd.read_excel('歌手.xlsx'))
df = df.isnull()
print(df)

為了展示效果,我執(zhí)行前去掉了第 5 行的信息埃仪,所以第 5 行出現(xiàn)一個 True评肆。

     歌手名字  歌手ID
0      False    False
1      False    False
2      False    False
3      False    False
4      True     False

數(shù)據(jù)統(tǒng)計

上周講 Numpy 庫時也講到了對數(shù)據(jù)的統(tǒng)計债查,計算數(shù)據(jù)最大值、最小值瓜挽、平均值攀操、方差、標準差等秸抚。pandas 也可以做這些工作速和,而且 pandas 中的 describe 可以直接顯示這個數(shù)據(jù)。

我們先創(chuàng)建一個科目成績的數(shù)據(jù)剥汤。

df = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
print(df)

數(shù)據(jù)如下:

  subject  data
0       語    90
1       數(shù)    91
2       外    92
3       理    93
4       化    94

我們用 describe 方法直接顯示這些統(tǒng)計數(shù)據(jù)颠放。

df = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
print(df.describe())

結(jié)果如下:

            data
count   5.000000
mean   92.000000
std     1.581139
min    90.000000
25%    91.000000
50%    92.000000
75%    93.000000
max    94.000000

多表合并

如果我們有多個數(shù)據(jù)表,我們需要對他進行合并處理吭敢。以下這些知識點和 SQL 很相似碰凶,如果你對 SQL 語句熟悉的話,以下很容易理解

對相同的列進行合并
df1 = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['語', '數(shù)', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, on='subject')
print(df3)

兩個表中鹿驼,語數(shù)外是相同的欲低,進行合并,結(jié)果如下:

  subject  data_x  data_y
0       語      90      90
1       數(shù)      91      91
2       外      92      92
內(nèi)連接

也就是兩個數(shù)據(jù)表中的交集部分畜晰。

df1 = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['語', '數(shù)', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='inner')
print(df3)

結(jié)果顯示兩個表中相同的數(shù)據(jù)砾莱。

  subject  data
0       語    90
1       數(shù)    91
2       外    92
左連接

以左表為主,右表只顯示交集部分的數(shù)據(jù)凄鼻。

df1 = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['語', '數(shù)', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='left')
print(df3)

執(zhí)行結(jié)果:

  subject  data
0       語    90
1       數(shù)    91
2       外    92
3       理    93
4       化    94
右連接

以右表為主腊瑟,左表只顯示交集部分的數(shù)據(jù)聚假。

df1 = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['語', '數(shù)', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='right')
print(df3)

執(zhí)行結(jié)果:

  subject  data
0       語    90
1       數(shù)    91
2       外    92
3       史    93
4       地    94
全連接

顯示兩個表數(shù)據(jù)的并集。

df1 = DataFrame({'subject': ['語', '數(shù)', '外', '理', '化'], 'data': range(90, 95)})
df2 = DataFrame({'subject': ['語', '數(shù)', '外', '史', '地'], 'data': range(90, 95)})
df3 = pd.merge(df1, df2, how='outer')
print(df3)

執(zhí)行結(jié)果:

  subject  data
0       語    90
1       數(shù)    91
2       外    92
3       理    93
4       化    94
5       史    93
6       地    94

pandas 庫的對于數(shù)據(jù)分析的基本用法就介紹到這里闰非。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膘格,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子财松,更是在濱河造成了極大的恐慌瘪贱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辆毡,死亡現(xiàn)場離奇詭異菜秦,居然都是意外死亡,警方通過查閱死者的電腦和手機胚迫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門喷户,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唾那,“玉大人访锻,你說我怎么就攤上這事∧只瘢” “怎么了期犬?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長避诽。 經(jīng)常有香客問我龟虎,道長,這世上最難降的妖魔是什么沙庐? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任鲤妥,我火速辦了婚禮,結(jié)果婚禮上拱雏,老公的妹妹穿的比我還像新娘棉安。我一直安慰自己,他們只是感情好铸抑,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布贡耽。 她就那樣靜靜地躺著,像睡著了一般鹊汛。 火紅的嫁衣襯著肌膚如雪蒲赂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天刁憋,我揣著相機與錄音滥嘴,去河邊找鬼。 笑死至耻,一個胖子當著我的面吹牛氏涩,可吹牛的內(nèi)容都是我干的届囚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼是尖,長吁一口氣:“原來是場噩夢啊……” “哼意系!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饺汹,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蛔添,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兜辞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迎瞧,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年逸吵,在試婚紗的時候發(fā)現(xiàn)自己被綠了凶硅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扫皱,死狀恐怖足绅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情韩脑,我是刑警寧澤氢妈,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站段多,受9級特大地震影響首量,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜进苍,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一加缘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧觉啊,春花似錦拣宏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搜吧,卻和暖如春市俊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滤奈。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工摆昧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜒程。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓绅你,卻偏偏與公主長得像伺帘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忌锯,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

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

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時伪嫁,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,319評論 0 9
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 10,975評論 6 13
  • 參考資料: Pandas 文檔 開始 安裝 pip install pandas使用前需導(dǎo)入模塊:import p...
    喔蕾喔蕾喔蕾蕾蕾閱讀 1,738評論 0 3
  • 如果愛偶垮,請深愛张咳。但你可知,愛的能力也是需要習(xí)得的似舵。沒有人一開始就會愛別人(除了父母愛孩子的天性)脚猾,只是在不斷的學(xué)習(xí)...
    勿擾_e316閱讀 114評論 0 0
  • 不知不覺中你變老了,兩邊的鬢發(fā)白的那么耀眼砚哗,在太陽的照射下晃的人都睜不開眼龙助。有時不禁的想,這眼前的人到底是誰蛛芥?是那...
    清淺菇娘閱讀 197評論 1 4