Python pandas之series鲸阻、DataFrame入門

Pandas 是基于NumPy 的一種工具玄呛,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的阅懦。Pandas 納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具徘铝。Pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法耳胎。利用Pandas進(jìn)行數(shù)據(jù)操作、預(yù)處理惕它、清洗是Python數(shù)據(jù)分析中的重要技能怕午。
數(shù)據(jù)被分為三部分:行索引(index),列索引(columns)及數(shù)據(jù)內(nèi)容(data)

Series

Series是Pandas中最基本的對(duì)象淹魄,Series類似一種一維數(shù)組诗轻。事實(shí)上,Series 基本上就是基于 NumPy 的數(shù)組對(duì)象來(lái)的揭北。和 NumPy 的數(shù)組不同,Series 能為數(shù)據(jù)自定義標(biāo)簽吏颖,也就是索引(index)搔体,然后通過(guò)索引來(lái)訪問(wèn)數(shù)組中的數(shù)據(jù)。

  • 創(chuàng)建Series半醉,使用默認(rèn)索引
sel =  Series(data=[1, 'lackychen', 30, 'a teacher and a student'])

一個(gè)Series其實(shí)就是一條數(shù)據(jù)疚俱,Series方法的第一個(gè)參數(shù)是data,第二個(gè)參數(shù)是index(索引)缩多,如果沒(méi)有傳值會(huì)使用默認(rèn)值(0-N)呆奕。

  • 創(chuàng)建Series养晋,使用自定義索引
sel = Series(data=[1, 'lackychen', 30,  'a teacher and a student'], index = ['序號(hào)','姓名','年齡','評(píng)語(yǔ)'])

index參數(shù)是我們自定義的索引值,注意:參數(shù)值的個(gè)數(shù)一定要與元素個(gè)數(shù)相同梁钾。

  • 將字典轉(zhuǎn)換為Series
dic={"red":100,"black":400,"green":300,"pink":900}
se2=Series(data=dic)

當(dāng)數(shù)據(jù)是字典的時(shí)候绳泉,會(huì)將字典的鍵作為索引,字典的值作為索引對(duì)應(yīng)的數(shù)據(jù)值姆泻。

Series是一組帶索引數(shù)組零酪,與list相似,一般我們用其承裝一條數(shù)據(jù)或者一行數(shù)據(jù)拇勃。多個(gè)Series可組成一個(gè)DataFrame四苇。

  • 通過(guò)values、index方咆、items等Series的屬性來(lái)獲取各部分的全部數(shù)據(jù)
from pandas import Series
emp=['001','002','003','004','005','006']
name=['亞瑟', '后裔','小喬','哪吒' ,'虞姬','王昭君']
series = Series(data=name,index=emp)

# 獲取數(shù)據(jù)的值
print(series.values)
# 獲取索引的值
print(series.index.tolist())
# 獲取每對(duì)索引和值
print(list(series.items()))

values月腋、index、items返回的對(duì)象分別是List瓣赂、Index榆骚、Zip類型的數(shù)據(jù),為了方便我們使用和觀察數(shù)據(jù)钩述,可以使用series.index.tolist()和list(series.items())方法轉(zhuǎn)化成List類型寨躁。
Series就像將索引值暴露在外面的List,其實(shí)它們除了外表相似以外牙勘,在獲取數(shù)據(jù)方面也非常的相似职恳。我們可以通過(guò)索引值來(lái)進(jìn)行單個(gè)數(shù)據(jù)的訪問(wèn),同樣也支持切片選擇多個(gè)數(shù)據(jù)方面。

from pandas import Series
emp=['001','002','003','004','005','006']
name=['亞瑟', '后裔','小喬','哪吒' ,'虞姬','王昭君']
series = Series(data=name,index=emp)
# 使用索引值獲取單個(gè)數(shù)據(jù)
print(series['001'])
# 使用索引值獲取多個(gè)不連續(xù)的數(shù)據(jù)
print('索引下標(biāo)',series[['002','004']])
# 使用切片獲取連續(xù)的數(shù)據(jù)
print('索引切片',series['001':'004'])
from pandas import Series
emp=['001','002','003','004','005','006']
name=['亞瑟', '后裔','小喬','哪吒' ,'虞姬','王昭君']
series = Series(data=emp,index=name)
# 使用位置下標(biāo)獲取單個(gè)數(shù)據(jù)
print(series[0])
# 使用位置下標(biāo)獲取多個(gè)不連續(xù)的數(shù)據(jù)
print('位置下標(biāo)',series[[1,3]])
# 使用位置下標(biāo)切片獲取連續(xù)的數(shù)據(jù)
print('位置切片',series[0:3])

我們自定的index值被叫做索引下標(biāo)放钦,沒(méi)有設(shè)置index值時(shí)會(huì)有一個(gè)默認(rèn)的值叫做位置下標(biāo)。

  • 利用循環(huán)來(lái)遍歷Series

直接遍歷Series的值:

# 遍歷并拿到data數(shù)據(jù)
for value in series:
    print(value)

通過(guò)keys()遍歷Series的索引:

# 遍歷并拿到index數(shù)據(jù)
for index in series.keys():
    print(index)

通過(guò)items()遍歷Series的每對(duì)索引和數(shù)據(jù):

# 遍歷并拿到每對(duì)索引和數(shù)據(jù)
for item in series.items():
    print(item)

DataFrame

DataFrame(數(shù)據(jù)表)是一種 2 維數(shù)據(jù)結(jié)構(gòu)恭金,數(shù)據(jù)以表格的形式存儲(chǔ)操禀,分成若干行和列。通過(guò) DataFrame横腿,你能很方便地處理數(shù)據(jù)颓屑。調(diào)用DataFrame()可以將多種格式的數(shù)據(jù)轉(zhuǎn)換為DataFrame對(duì)象,它的的三個(gè)參數(shù)data耿焊、index和columns分別為數(shù)據(jù)揪惦、行索引和列索引。

  • 二維列表創(chuàng)建dataframe
lol_list = [ ['上單','TheShy',20], ['打野','小天',19], ['中單','Faker',23], ['ADC','Uzi',22], ['輔助','Ming',21] ]
df = DataFrame(data=lol_list)

有沒(méi)有辦法在創(chuàng)建DataFrame對(duì)象的時(shí)候?yàn)槊恳涣性O(shè)定一個(gè)有意義的名字呢罗侯?我們可以通過(guò)給DataFrame構(gòu)造函數(shù)中的參數(shù)index,columns傳值來(lái)設(shè)定DataFrame的中的行器腋、列索引的值。

  • 二維列表創(chuàng)建dataframe,自定義index纫塌、columns
lol_list = [ ['上單','TheShy',20], ['打野','小天',19], ['中單','Faker',23], ['ADC','Uzi',22], ['輔助','Ming',21] ]
df = DataFrame(data=lol_list, index=['a','b','c','d','e'], columns=['位置','ID號(hào)','年齡'])
  • 使用字典創(chuàng)建dataframe诊县,字典的鍵值作為數(shù)據(jù)的列索引值
dic={ '位置': ['上單', '打野', '中單', 'ADC','輔助'], 'ID號(hào)': ['TheShy', '小天', 'Faker', 'Uzi', 'Ming'],  'year': [20, 19, 23, 22,21]}
df=pd.DataFrame(dic)

可以把 DataFrame 理解成一組采用同樣索引的 Series 的集合。DataFrame處理數(shù)據(jù)常見(jiàn)的操作有選取措左、替換行或列的數(shù)據(jù)依痊,重組數(shù)據(jù)表、修改索引媳荒、多重篩選等抗悍。
DataFrame里的數(shù)據(jù)是按照行和列來(lái)進(jìn)行排列,如何對(duì)DataFrame的數(shù)據(jù)按照行或者列進(jìn)行選擇钳枕、遍歷以及修改缴渊。在這之前我們要清楚DataFrame中的數(shù)據(jù)情況,首先數(shù)據(jù)的維度是一維還是二維的我們可以使用ndim查看鱼炒,數(shù)據(jù)的行數(shù)和列數(shù)使用shape查看衔沼,行、列的索引值使用index昔瞧、columns查看指蚁。

import pandas as pd
df_dict = {
    'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
    'age':['18','20','19','22'],
    'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)
# 獲取行數(shù)和列數(shù)
print(df.shape)
# 獲取行索引
print(df.index.tolist())
# 獲取列索引
print(df.columns.tolist())
# 獲取數(shù)據(jù)的維度
print(df.ndim)

數(shù)據(jù)量比較大并且我們想看數(shù)據(jù)的具體情況的時(shí)候,直接打印df比較耗時(shí)自晰,所以我們可以只獲取前幾行或者后幾行凝化,了解數(shù)據(jù)的構(gòu)成即可。這時(shí)候有兩個(gè)法寶head()酬荞、tail()幫我們解決這個(gè)問(wèn)題搓劫。

# 獲取前兩條
df.head(2)
# 獲取后兩條
df.tail(2)

兩個(gè)方法都有默認(rèn)值,默認(rèn)值是5混巧,當(dāng)然也可以自己設(shè)置枪向,如果數(shù)據(jù)不夠5個(gè)會(huì)將全部數(shù)據(jù)拿出來(lái)。

# 通過(guò)位置索引切片獲取一行
print(df[0:1])
# 通過(guò)位置索引切片獲取多行
print(df[1:3])
# 獲取多行里面的某幾列
print(df[1:3][['name','age']])
# 獲取DataFrame的列
print(df['name'])
# 獲取多個(gè)列
print(df[['name','age']])

df[]不支持直接輸入標(biāo)簽索引獲取行數(shù)據(jù)咧党,例如:df['001']秘蛔;
這種方式可以獲取一列數(shù)據(jù),列如:df['name']傍衡;
如果想獲取多行里面的某幾列可寫成:df[行][列]深员,例如:df[1:3][['name','age']],將列索引值放到同一個(gè)列表中,再將列表放到第二個(gè)方括號(hào)中蛙埂。

  • 行標(biāo)簽索引篩選loc[]辨液,行位置索引篩選iloc[]:
import pandas as pd

df_dict = {
    'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
    'age':['18','20','19','22'],
    'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)

# 獲取某一行某一列的數(shù)據(jù)
print(df.loc['001','name'])
# 某一行多列的數(shù)據(jù)
print(df.loc['001',['name','weight']])
# 一行所有列
print(df.loc['001',:])
# 選擇間隔的多行多列
print(df.loc[['001','003'],['name','weight']])
# 選擇連續(xù)的多行和間隔的多列
print(df.loc['001':'003','name':'weight'])

df.loc[] 通過(guò)標(biāo)簽索引獲取行數(shù)據(jù),它的語(yǔ)法結(jié)構(gòu)是這樣的:df.loc[[行],[列]]箱残,方括號(hào)中用逗號(hào)分隔,左側(cè)是行、右側(cè)是列被辑。注意:如果行或者列使用切片的時(shí)候燎悍,要把方括號(hào)去掉,列df.loc['001':'003','name':'weight']盼理。
df.iloc[] 通過(guò)位置索引獲取行數(shù)據(jù)谈山,他的操作和loc[]操作是一樣的,只要將標(biāo)簽索引改成位置索引就好了宏怔。

# 取一行
print(df.iloc[1])
# 取連續(xù)多行
print(df.iloc[0:2])
# 取間斷的多行
print(df.iloc[[0,2],:])
# 取某一列
print(df.iloc[:,1])
# 某一個(gè)值
print(df.iloc[1,0])
import pandas as pd

df_dict = {
    'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
    'age':['18','20','19','22'],
    'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])
print(df)
print(df.iloc[1])
print(df.iloc[0:2])
print(df.iloc[[0,2],:])
print(df.iloc[:,1])
print(df.iloc[1:3,0:1])
print(df.iloc[1,0])

需要注意的是奏路,loc和iloc的切片操作在是否包含切片終點(diǎn)的數(shù)據(jù)有差異。loc['001':'003']的結(jié)果中包含行索引003對(duì)應(yīng)的行臊诊。iloc[0:2] 結(jié)果中不包含序號(hào)為2的數(shù)據(jù)鸽粉,切片終點(diǎn)對(duì)應(yīng)的數(shù)據(jù)不在篩選結(jié)果中。loc是指location的意思抓艳,iloc中的i是指integer触机。這兩者的區(qū)別如下:
loc:works on labels in the index.
iloc:works on the positions in the index (so it only takes integers).
也就是說(shuō)loc是根據(jù)index來(lái)索引,比如下邊的df定義了一個(gè)index玷或,那么loc就根據(jù)這個(gè)index來(lái)索引對(duì)應(yīng)的行儡首;iloc并不是根據(jù)index來(lái)索引,而是根據(jù)行號(hào)來(lái)索引偏友,行號(hào)從0開(kāi)始蔬胯,逐次加1。

  • dataframe數(shù)據(jù)遍歷

iterrows(): 按行遍歷位他,將DataFrame的每一行轉(zhuǎn)化為(index, Series)對(duì)氛濒。index為行索引值,Series為該行對(duì)應(yīng)的數(shù)據(jù)棱诱。

for index,row_data in df.iterrows():
    print(index,row_data)

iteritems():按列遍歷泼橘,將DataFrame的每一列轉(zhuǎn)化為(column, Series)對(duì)。column為列索引的值迈勋,Series為該列對(duì)應(yīng)的數(shù)據(jù)炬灭。

for col,col_data in df.iteritems():
    print(col)

示例:

import pandas as pd

df_dict = {
    'name':['ZhangSan','LiSi','WangWu','ZhaoLiu'],
    'age':['18','20','19','22'],
    'weight':['50','55','60','80']
}
df = pd.DataFrame(data=df_dict,index=['001','002','003','004'])

for index, row_data in df.iterrows():
    print(index, row_data)
for col, col_data in df.iterrows():
    print(col)
    print(col_data)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市靡菇,隨后出現(xiàn)的幾起案子重归,更是在濱河造成了極大的恐慌,老刑警劉巖厦凤,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼻吮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡较鼓,警方通過(guò)查閱死者的電腦和手機(jī)椎木,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門违柏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人香椎,你說(shuō)我怎么就攤上這事漱竖。” “怎么了畜伐?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵馍惹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我玛界,道長(zhǎng)万矾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任慎框,我火速辦了婚禮良狈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鲤脏。我一直安慰自己们颜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布猎醇。 她就那樣靜靜地躺著窥突,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硫嘶。 梳的紋絲不亂的頭發(fā)上阻问,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音沦疾,去河邊找鬼称近。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哮塞,可吹牛的內(nèi)容都是我干的刨秆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼忆畅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼衡未!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起家凯,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缓醋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后绊诲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體送粱,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年掂之,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抗俄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脆丁。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖橄镜,靈堂內(nèi)的尸體忽然破棺而出偎快,到底是詐尸還是另有隱情,我是刑警寧澤洽胶,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站裆馒,受9級(jí)特大地震影響姊氓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喷好,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一翔横、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梗搅,春花似錦禾唁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至哆键,卻和暖如春掘托,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背籍嘹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工闪盔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辱士。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓泪掀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親颂碘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子异赫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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