pandas

參考:https://geek-docs.com/pandas

一.pandas數(shù)據(jù)處理簡(jiǎn)介

1.簡(jiǎn)介

pandas:是基于:實(shí)現(xiàn)的python的一個(gè)數(shù)據(jù)分析包。名字來(lái)源:面板數(shù)據(jù)(panel data)和python數(shù)據(jù)分析(data analysis)
注意:
DataFrame是一個(gè)二維表格。0軸:跨行(down)玩徊, 1軸:跨列(across)

  • 使用0值:表示沿著每一列或者行標(biāo)簽(行索引值)癌椿,向下執(zhí)行方法
  • 使用1值:表示沿著每一行或者列標(biāo)簽(列索引值),橫向執(zhí)行對(duì)應(yīng)的方法

2.數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介

  • Series:一維數(shù)組件缸,與Numpy中一維array類似。二者與python基本的數(shù)據(jù)結(jié)構(gòu)list也很接近。
  • Time-Series:以時(shí)間為索引的Series
  • DataFrame:二維的表格形數(shù)據(jù)結(jié)構(gòu)休涤。可以理解為:Series的容器
  • Panel:三維數(shù)組,可以理解為DataFrame的容器


    image.png

    1.series構(gòu)造函數(shù):


    image.png

    2.series屬性和方法:
    image.png

    3.DataFrame構(gòu)造函數(shù)


    image.png

    4.DataFrame屬性和方法
    image.png

    5.pandas描述性統(tǒng)計(jì)
    image.png

    6.pandas函數(shù)應(yīng)用
    image.png

    7.迭代

    7.1 對(duì)象直接進(jìn)行迭代
    7.2 其他迭代


    image.png

    itertuples()方法將DataFrame中的每一行返回一個(gè)產(chǎn)生一個(gè)命名元組的迭代器功氨。元組的第一個(gè)元素:是行的相應(yīng)的索引值序苏。而剩余的值是行值。

二.pandas實(shí)例

1.數(shù)據(jù)選擇和賦值

1.排序

  • 按軸排序:df.sort_index(axis=1, ascending=False)捷凄,表示:按照列索引值(axis=1)忱详,進(jìn)行降序排列
  • 按值排序:df.sort_values(by='B')
    2.選擇數(shù)據(jù)
    1)獲取
  • 選擇一列,產(chǎn)生一個(gè)‘Series’:df['A'] or df.A
  • 對(duì)行進(jìn)行切片:df[0:3]
    2)按標(biāo)簽選擇(loc)
  • 通過(guò)標(biāo)簽獲取一行數(shù)據(jù):df.loc[dates[0]]
  • 通過(guò)標(biāo)簽在多個(gè)軸上選擇數(shù)據(jù):df.loc[:, ['A', 'B']]
  • 通過(guò)標(biāo)簽同時(shí)在兩個(gè)軸上切片:df.loc['20130102:20130104', ['A', 'B']]
    3)按位置選擇(iloc)
  • 通過(guò)傳遞整數(shù)的位置選擇:df.iloc[3]
  • 通過(guò)整數(shù)切片:df.iloc[3:5, 0:2]. PS:最后一個(gè)不包括(左閉右開)
  • 通過(guò)傳遞整數(shù)列表按位置切片:df.iloc[[1,2,4], [0,2]]
  • 整行切片:df.iloc[1:3]
  • 整列切片:df.iloc[:, 1:3]
  • 獲取某個(gè)具體值:df.iloc[1, 1]
  • 快速訪問(wèn)標(biāo)量:df.iat[1, 1]
    4)布爾索引
  • 使用單個(gè)列的值來(lái)選擇數(shù)據(jù):df[df.A > 0], 所有:df[]行索引跺涤, 行條件:df.A > 0
  • 從滿足布爾條件的DataFrame中選擇值:df[df > 0], 備注: < 0的值都變成了nan
  • 使用isin()過(guò)濾:df[df['E'].isin(['two', 'four'])]
    5)賦值(at和iat)
  • 添加新列將自動(dòng)根據(jù)索引對(duì)其數(shù)據(jù):df['F'] = 1
  • 通過(guò)標(biāo)簽賦值:df.at[datas[0], 'A'] = 0
  • 通過(guò)位置賦值:df.iat[0, 1] = 0
  • 使用Numpy數(shù)組賦值:df.loc[:, 'D'] = np.array([5]*len(df))
  • 帶where條件的賦值操作:df2[df2 > 0] = -df2

三.pandas數(shù)據(jù)處理

1.GroupBy:分組合并

image.png

1)過(guò)程和原理
GroupBy操作由三個(gè)階段組成:

  • 分組:將數(shù)據(jù)分成多個(gè)組匈睁。分組標(biāo)準(zhǔn):通常與索引或某一列具體元素有關(guān)
  • 用函數(shù)處理:用函數(shù)處理每一個(gè)分組,為每組數(shù)組生成一個(gè)單一的值
  • 合并:把來(lái)自每一組的結(jié)果匯集到一起桶错,合并成一個(gè)新對(duì)象
    2)實(shí)例:用列元素航唆,作為鍵進(jìn)行分組
  • group=df['price1'].groupby(df['color']), 得到的對(duì)象:GroupBy對(duì)象
    也可以寫成:group=df.groupby(df['color']).price1 or group = df.groupby(df['color'])['price1']
    應(yīng)該是:groupby的計(jì)算優(yōu)先等級(jí)比較高
  • group.groups:查看分組情況
  • group.mean():對(duì)每個(gè)分組應(yīng)用mean函數(shù)
  • group.sum():對(duì)每個(gè)分組應(yīng)用sum函數(shù)
    3)等級(jí)分組:可以使用多列,多個(gè)鍵進(jìn)行等級(jí)分組
  • group = df['price1'].groupby([df['color'], df['object']])院刁, 先按照color進(jìn)行分組佛点,然后再對(duì)每一組按照object進(jìn)行分組
  • group.sum():最小分組,進(jìn)行求和

2.merge():合并

把兩個(gè)DF按照一定方式合并成一個(gè)DF

3.concat:拼接

1)concatenate()函數(shù)
numpy的concatenate()函數(shù)就是用于數(shù)組的拼接擦歐總
2)concat()函數(shù)
pandas庫(kù)以及它的Series和DataFrame等數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)了帶編號(hào)的索引黎比,Pandas的concat()函數(shù)實(shí)現(xiàn)了按索引拼接的功能
例子:

#默認(rèn)axis=0
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])超营, 
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2]))

#按照axis=1
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2], axis=1))

#內(nèi)連接操作
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
df = pd.concat([ser1, ser2], axis=1)
print(df)
print('--------')
print(pd.concat([ser1, df], axis=1, join='inner'))
image.png

concat():默認(rèn)按照axis=0這條軸進(jìn)行拼接數(shù)據(jù),并返回Series對(duì)象阅虫。如果指定axis=1演闭, 返回的結(jié)果是DataFrame對(duì)象


image.png

concat():默認(rèn)是外連結(jié)操作,把join選項(xiàng)設(shè)置為inner颓帝,可以執(zhí)行內(nèi)連接操作米碰。


image.png

3)等級(jí)索引
假如我們想用于拼接的軸上創(chuàng)建等級(jí)索引,可以借助keys選項(xiàng)來(lái)完成购城,如下所示:
#axis=0方向吕座,建立額外索引
import pandas as pd
import numpy as np

ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2], keys=[1,2]))

#axis=1方向,建立索引
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2], axis=1,keys=[1,2]))
image.png

image.png

4)DataFrame對(duì)象的拼接

  • pd.concat([frame1, frame2])
  • pd.concat([frame1, frame2], axis=1)

4.刪除數(shù)據(jù):

  • drop():返回不包含已刪除索引及其元素的新對(duì)象
  • del:刪除數(shù)據(jù)列
  • drop_duplicateds():從DataFrame對(duì)象中刪除所有重復(fù)的行瘪板,返回刪除重復(fù)行后的DataFrame對(duì)象

1)刪除Series對(duì)象數(shù)據(jù)

  • drop:ser.drop('yelow') or ser.drop(['blue', 'white'])
    2)刪除DataFrame對(duì)象數(shù)據(jù)
  • 刪除行:frame.drop(['blue', 'yellow'])
  • 刪除列:frame.drop(['pen', 'pencil'], axis=1)吴趴。axis=1,表示跨列的方向侮攀,也就是橫向的方向锣枝。找pen和pencil索引并刪除
  • del:刪除列的另一種方式 del frame['ball']
  • 刪除重復(fù)行:
    duplicated():函數(shù)可以用力啊檢測(cè)重復(fù)的行,返回元素為bool的Series對(duì)象兰英,每個(gè)元素對(duì)應(yīng)一行撇叁。如果該行與前面行重復(fù),則為True
    drop_duplicated():實(shí)現(xiàn)了刪除功能畦贸,該函數(shù)返回刪除重復(fù)行后的DataFrame對(duì)象

5.旋轉(zhuǎn)數(shù)據(jù)

通常陨闹,按行或列調(diào)整元素并不總能滿足目標(biāo),有時(shí),需要按照行重新調(diào)整列或者按照列重新調(diào)整行的元素
1)DataFrame的轉(zhuǎn)置

  • df.T
    2)按等級(jí)索引旋轉(zhuǎn)
    前面講過(guò)趋厉,DataFrame對(duì)象支持等級(jí)索引寨闹。利用這一點(diǎn),可以還從i想你調(diào)整DataFrame對(duì)象中國(guó)呢?cái)?shù)據(jù)觅廓,軸向旋轉(zhuǎn)有兩個(gè)基本操作:
  • 入棧(Stacking):旋轉(zhuǎn)數(shù)據(jù)結(jié)構(gòu)鼻忠,把列旋轉(zhuǎn)為行
  • 出棧(unStacking):把行旋轉(zhuǎn)為列
import pandas as pd
import numpy as np
# df對(duì)象應(yīng)用stack函數(shù),會(huì)把列轉(zhuǎn)變?yōu)樾需境瘢瑥亩玫揭粋€(gè)Series對(duì)象
dframe = pd.DataFrame(np.arange(9).reshape(3,3),
                      index=['white', 'black', 'red'],
                      columns=['ball', 'pen', 'pencil'])
print(dframe)
print('------------')
print(dframe.stack())

#在這個(gè)具有登記索引結(jié)構(gòu)的Series對(duì)象上執(zhí)行unstack()操作帖蔓,可以重建之前的DataFrame對(duì)象,從而可以以數(shù)據(jù)透視表的形式來(lái)展示Series對(duì)象中的等級(jí)索引結(jié)構(gòu)
dframe = pd.DataFrame(np.arange(9).reshape(3,3),
                      index=['white', 'black', 'red'],
                      columns=['ball', 'pen', 'pencil'])
ser = dframe.stack()
print(ser.unstack())

#出椡В可以應(yīng)用不同的層級(jí)塑娇,為unstack()函數(shù)傳入表示層級(jí)的編號(hào)或名稱,即可對(duì)相應(yīng)的層級(jí)進(jìn)行操作劫侧。
ser = dframe.stack()
print(ser.unstack(0))
print('------------')
print(ser.unstack(1))
image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埋酬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烧栋,更是在濱河造成了極大的恐慌写妥,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审姓,死亡現(xiàn)場(chǎng)離奇詭異珍特,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)魔吐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門扎筒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人酬姆,你說(shuō)我怎么就攤上這事嗜桌。” “怎么了辞色?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵骨宠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我淫僻,道長(zhǎng)诱篷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任雳灵,我火速辦了婚禮,結(jié)果婚禮上闸盔,老公的妹妹穿的比我還像新娘悯辙。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布躲撰。 她就那樣靜靜地躺著针贬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拢蛋。 梳的紋絲不亂的頭發(fā)上桦他,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音谆棱,去河邊找鬼快压。 笑死,一個(gè)胖子當(dāng)著我的面吹牛垃瞧,可吹牛的內(nèi)容都是我干的蔫劣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼个从,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脉幢!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起嗦锐,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嫌松,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奕污,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萎羔,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年菊值,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了外驱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腻窒,死狀恐怖昵宇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情儿子,我是刑警寧澤瓦哎,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站柔逼,受9級(jí)特大地震影響蒋譬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜愉适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一犯助、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧维咸,春花似錦剂买、人聲如沸惠爽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婚肆。三九已至,卻和暖如春坐慰,著一層夾襖步出監(jiān)牢的瞬間较性,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工结胀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赞咙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓把跨,卻偏偏與公主長(zhǎng)得像人弓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子着逐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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