Pandas數(shù)據(jù)分析教程——盤點那些常用的函數(shù)(下)

微信公眾號:「Python讀財」

如有問題或建議轿塔,請公眾號留言

繼上一篇文章Pandas數(shù)據(jù)處理——盤點那些常用的函數(shù)(上)趾断,這篇文章整理了剩下的一些Pandas常見方法鸿脓,整體難度會比上一篇文章中的大一點躁愿,但還是比較容易理解的袍睡。話不多說创泄,直接進入正題。

用于演示的數(shù)據(jù)如下:

In [11]: data
Out[11]:
  company  gender  salary   age
0       B  female      30  40.0
1       A  female      36  31.0
2       B  female      35  28.0
3       B  female       9  18.0
4       B  female      16  43.0
5       A    male      46  22.0
6       B  female      15  28.0
7       B  female      33  40.0
8       C    male      19  32.0

.astype()

作用對象:SeriesDataFrame

主要用途:修改字段的數(shù)據(jù)類型且改,數(shù)據(jù)量大的情況下可用于減小數(shù)據(jù)占用的內(nèi)存验烧,多用于Series

用法:

# 把age字段轉(zhuǎn)為int類型
In [12]: data["age"] = data["age"].astype(int)

In [13]: data
Out[13]:
  company  gender  salary  age
0       B  female      30   40
1       A  female      36   31
2       B  female      35   28
3       B  female       9   18
4       B  female      16   43
5       A    male      46   22
6       B  female      15   28
7       B  female      33   40
8       C    male      19   32

.rename()

作用對象:Series,DataFrame(大多數(shù)情況下)

主要用途:多用于修改DataFrame的列名

主要參數(shù):

  • columns (dict-like or function

    指定要修改的列名以及新的列名又跛,一般以字典形式傳入

  • inplace (boolean, default False

    是否作用于原對象

用法:

# 將'age'更改為員工編號'number',并作用于原對象
In [15]: data.rename(columns={'age':'number'},inplace=True)

In [16]: data
Out[16]:
  company  gender  salary  number
0       B  female      30      40
1       A  female      36      31
2       B  female      35      28
3       B  female       9      18
4       B  female      16      43
5       A    male      46      22
6       B  female      15      28
7       B  female      33      40
8       C    male      19      32

.set_index()

作用對象:DataFrame

主要用途:將DataFrame中的某一(多)個字段設置為索引

用法:

In [19]: data.set_index('number',inplace=True)

In [20]: data
Out[20]:
       company  gender  salary
number
40           B  female      30
31           A  female      36
28           B  female      35
18           B  female       9
43           B  female      16
22           A    male      46
28           B  female      15
40           B  female      33
32           C    male      19

.reset_index()

作用對象:Series,DataFrame

主要用途:重置索引,默認重置后的索引為0~len(df)-1

主要參數(shù):

  • drop (boolean, default False

    是否丟棄原索引若治,具體看下方演示

  • inplace (boolean, default False

    是否作用于原對象

用法:

# drop = True慨蓝,重置索引,并把原有的索引丟棄
In [22]: data.reset_index(drop=True)
Out[22]:
  company  gender  salary
0       B  female      30
1       A  female      36
2       B  female      35
3       B  female       9
4       B  female      16
5       A    male      46
6       B  female      15
7       B  female      33
8       C    male      19

# drop = False,重置索引
# 原索引列'number'作為新字段進入DataFrame
In [23]: data.reset_index(drop=False,inplace=True)

In [24]: data
Out[24]:
   number company  gender  salary
0      40       B  female      30
1      31       A  female      36
2      28       B  female      35
3      18       B  female       9
4      43       B  female      16
5      22       A    male      46
6      28       B  female      15
7      40       B  female      33
8      32       C    male      19

.drop_duplicates()

作用對象:Series,DataFrame

主要用途:去掉重復值端幼,作用和SQL中的distinct類似

用法:

In [26]: data['company'].drop_duplicates()
Out[26]:
0    B
1    A
8    C
Name: company, dtype: object

.drop()

作用對象:Series,DataFrame

主要用途:常用于刪掉DataFrame中的某些字段

主要參數(shù):

  • columns (single label or list-like

    指定要刪掉的字段

用法:

# 刪掉'gender'列
In [27]: data.drop(columns = ['gender'])
Out[27]:
   number company  salary
0      40       B      30
1      31       A      36
2      28       B      35
3      18       B       9
4      43       B      16
5      22       A      46
6      28       B      15
7      40       B      33
8      32       C      19

.isin()

作用對象:Series,DataFrame

主要用途:常用于構(gòu)建布爾索引礼烈,對DataFrame的數(shù)據(jù)進行條件篩選

用法:

# 篩選出A公司和C公司的員工記錄
In [29]: data.loc[data['company'].isin(['A','C'])]
Out[29]:
   number company  gender  salary
1      31       A  female      36
5      22       A    male      46
8      32       C    male      19

pd.cut()

主要用途:將連續(xù)變量離散化,比如將人的年齡劃分為各個區(qū)間

主要參數(shù):

  • x (array-like

    需要進行離散化的一維數(shù)據(jù)

  • bins (int, sequence of scalars, or IntervalIndex

    設置需要分成的區(qū)間婆跑,可以指定區(qū)間數(shù)量此熬,也可以指定間斷點

  • labels (array or bool, optional

    設置區(qū)間的標簽

用法:

# 把薪水分成5個區(qū)間
In [33]: pd.cut(data.salary,bins = 5)
Out[33]:
0     (23.8, 31.2]
1     (31.2, 38.6]
2     (31.2, 38.6]
3    (8.963, 16.4]
4    (8.963, 16.4]
5     (38.6, 46.0]
6    (8.963, 16.4]
7     (31.2, 38.6]
8     (16.4, 23.8]
Name: salary, dtype: category
Categories (5, interval[float64]): [(8.963, 16.4] < (16.4, 23.8] < (23.8, 31.2] < (31.2, 38.6] <(38.6, 46.0]]
                                     
# 自行指定間斷點
In [32]: pd.cut(data.salary,bins = [0,10,20,30,40,50])
Out[32]:
0    (20, 30]
1    (30, 40]
2    (30, 40]
3     (0, 10]
4    (10, 20]
5    (40, 50]
6    (10, 20]
7    (30, 40]
8    (10, 20]
Name: salary, dtype: category
Categories (5, interval[int64]): [(0, 10] < (10, 20] < (20, 30] < (30, 40] < (40, 50]]

# 指定區(qū)間的標簽                                                                             
In [34]: pd.cut(data.salary,bins = [0,10,20,30,40,50],labels = ['低','中下','中','中上','高'])
Out[34]:
0     中
1    中上
2    中上
3     低
4    中下
5     高
6    中下
7    中上
8    中下
Name: salary, dtype: category
Categories (5, object): [低 < 中下 < 中 < 中上 < 高]

pd.qcut()

主要用途:將連續(xù)變量離散化,區(qū)別于pd.cut()用具體數(shù)值劃分滑进,pd.qcut()使用分位數(shù)進行區(qū)間劃分

主要參數(shù):

  • x (array-like

    需要進行離散化的一維數(shù)據(jù)

  • q(integer or array of quantiles

    設置需要分成的區(qū)間犀忱,可以指定區(qū)間格式,也可以指定間斷點

  • labels (array or boolean, default None

    設置區(qū)間的標簽

用法:

# 按照0-33.33%扶关,33.33%-66.67%阴汇,66.67%-100%百分位進行劃分
In [35]: pd.qcut(data.salary,q = 3)
Out[35]:
0    (18.0, 33.667]
1    (33.667, 46.0]
2    (33.667, 46.0]
3     (8.999, 18.0]
4     (8.999, 18.0]
5    (33.667, 46.0]
6     (8.999, 18.0]
7    (18.0, 33.667]
8    (18.0, 33.667]
Name: salary, dtype: category
Categories (3, interval[float64]): [(8.999, 18.0] < (18.0, 33.667] < (33.667, 46.0]]

.where()

作用對象:Series,DataFrame

主要用途:將不符合條件的值替換掉成指定值,相當于執(zhí)行了一個if-else

主要參數(shù):

  • cond (boolean Series/DataFrame, array-like, or callable

    用于篩選的條件

  • other(scalar, Series/DataFrame, or callable

    對不符合cond條件的值(結(jié)果為為False)节槐,用other的值進行替代

用法:

# 語句解析
# 若salary<=40搀庶,則保持原來的值不變
# 若salary大于40,則設置為40
In [38]: data['salary'].where(data.salary<=40,40)
Out[38]:
0    30
1    36
2    35
3     9
4    16
5    40
6    15
7    33
8    19
Name: salary, dtype: int32

pd.concat()

主要用途:將多個SeriesDataFrame拼起來(橫拼或者豎拼都可以)

主要參數(shù):

  • objs (a sequence or mapping of Series or DataFrame objects

    用于拼接的SeriesDataFrame铜异,一般都放在一個列表中傳入

  • axis (0/’index’, 1/’columns’

    控制數(shù)據(jù)是橫向拼接還是縱向拼接哥倔,默認為縱向拼接。

  • ignore_index (bool, default False

    是否保留原SeiresDataFrame內(nèi)部的索引揍庄,如果為True則對拼接而成的數(shù)據(jù)生成新索引(0~n-1)

用法:

# 分別取data的前三條和后三條為data1和data2
In [41]: data1 = data.head(3)
In [42]: data1
Out[42]:
   number company  gender  salary
0      40       B  female      30
1      31       A  female      36
2      28       B  female      35

In [43]: data2 = data.tail(3)
In [44]: data2
Out[44]:
   number company  gender  salary
6      28       B  female      15
7      40       B  female      33
8      32       C    male      19

# 拼接數(shù)據(jù)
In [45]: pd.concat([data1,data2],ignore_index = False)
Out[45]:
   number company  gender  salary
0      40       B  female      30
1      31       A  female      36
2      28       B  female      35
6      28       B  female      15
7      40       B  female      33
8      32       C    male      19

# 拼接數(shù)據(jù)并重置索引
In [46]: pd.concat([data1,data2],ignore_index=True)
Out[46]:
   number company  gender  salary
0      40       B  female      30
1      31       A  female      36
2      28       B  female      35
3      28       B  female      15
4      40       B  female      33
5      32       C    male      19

.pivot_table()

作用對象:DataFrame

主要用途:對DataFrame進行數(shù)據(jù)透視咆蒿,相當于Excel中的數(shù)據(jù)透視表

主要參數(shù):

  • values (column to aggregate, optional

    用于聚合運算的字段(數(shù)據(jù)透視的目標變量)

  • index (column, Grouper, array, or list of the previous

    類比于數(shù)據(jù)透視表中的行標簽

  • columns (column, Grouper, array, or list of the previous

    類比于數(shù)據(jù)透視表中的列標簽

  • aggfunc ( function, list of functions, dict, default numpy.mean

    對values進行什么聚合運算

用法:

# 從公司和性別兩個維度對薪水進行數(shù)據(jù)透視
# 看看這兩個維度下的平均薪資水平
In [47]: data.pivot_table(values = 'salary',index = 'company',
                          columns = 'gender',aggfunc=np.mean)
Out[47]:
gender   female  male
company
A          36.0  46.0
B          23.0   NaN
C           NaN  19.0

Pandas中常用的函數(shù)便整理到這里,至于mapapply這類的就不在此過多介紹了币绩,詳細的介紹可以看之前寫過的文章蜡秽。希望整理的這些函數(shù)能對大家有所幫助!

原創(chuàng)不易缆镣,如果覺得有點用芽突,希望可以隨手點個贊,拜謝各位老鐵董瞻。

掃碼關注公眾號 「Python讀財」寞蚌,第一時間獲取干貨田巴!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挟秤,隨后出現(xiàn)的幾起案子壹哺,更是在濱河造成了極大的恐慌,老刑警劉巖艘刚,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管宵,死亡現(xiàn)場離奇詭異,居然都是意外死亡攀甚,警方通過查閱死者的電腦和手機箩朴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秋度,“玉大人炸庞,你說我怎么就攤上這事〖运梗” “怎么了埠居?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長事期。 經(jīng)常有香客問我滥壕,道長,這世上最難降的妖魔是什么刑赶? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任捏浊,我火速辦了婚禮,結(jié)果婚禮上撞叨,老公的妹妹穿的比我還像新娘金踪。我一直安慰自己,他們只是感情好牵敷,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布胡岔。 她就那樣靜靜地躺著,像睡著了一般枷餐。 火紅的嫁衣襯著肌膚如雪靶瘸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天毛肋,我揣著相機與錄音怨咪,去河邊找鬼。 笑死润匙,一個胖子當著我的面吹牛诗眨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孕讳,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼匠楚,長吁一口氣:“原來是場噩夢啊……” “哼巍膘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芋簿,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤峡懈,失蹤者是張志新(化名)和其女友劉穎高氮,沒想到半個月后躬它,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡姜贡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年幽告,在試婚紗的時候發(fā)現(xiàn)自己被綠了梅鹦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡冗锁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗤栓,到底是詐尸還是另有隱情冻河,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布茉帅,位于F島的核電站叨叙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏堪澎。R本人自食惡果不足惜擂错,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望樱蛤。 院中可真熱鬧钮呀,春花似錦、人聲如沸昨凡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽便脊。三九已至蚂四,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哪痰,已是汗流浹背遂赠。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晌杰,地道東北人跷睦。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像乎莉,于是被迫代替她去往敵國和親送讲。 傳聞我的和親對象是個殘疾皇子奸笤,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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

  • 目錄: 5.1 pandas 的數(shù)據(jù)結(jié)構(gòu)介紹 5.1.1 Series 5.1.2 DataFrame 5.1.3...
    凌岸_ing閱讀 4,748評論 0 17
  • 在python中,眾所周知哼鬓,數(shù)據(jù)預處理最好用的包就是pandas了监右,以下是pandas里的dataframe數(shù)據(jù)結(jié)...
    天涯海角醉云游閱讀 31,294評論 1 12
  • pandas入門 簡介 pandas包含的數(shù)據(jù)結(jié)構(gòu)和操作工具能快速簡單地清洗和分析數(shù)據(jù)。 pandas經(jīng)常與Num...
    python測試開發(fā)閱讀 2,380評論 1 16
  • 早課抄了林庚先生的詩歌《破曉》异希。節(jié)假日的作息是最沒有規(guī)律的健盒,而春節(jié)期間的作息又是最中之最〕撇荆可以睡得很晚扣癣,也可以睡得...
    東豐林波閱讀 226評論 0 2
  • 二十多年在這人間中翻滾,有太多值得記憶并回憶的東西了憨降,有幸這個世間有照片這種東西父虑,感謝達蓋爾。 因為是女朋友推薦的...
    白胖子的家屬閱讀 138評論 0 0