Series和DataFrame的數(shù)據(jù)取值與選擇

Series和DataFrame的數(shù)據(jù)取值與選擇

數(shù)據(jù)取值與選擇

NumPy數(shù)據(jù)取值的方法扬跋,包括取值操作(如arr[2, 1])栗菜、切片操作(如arr[:, 1:5])筋粗、掩碼操作(如arr[arr > 0])芭析、花哨的索引操作(如arr[0, [1, 5]])晌砾,以及組合操作(如arr[:, [1, 5]])。

在NumPy的二維數(shù)組里担忧,data[0]返回第一行芹缔,而在DataFrame中,data['col0']返回第一列瓶盛。

import numpy as np
import pandas as pd

Series數(shù)據(jù)選擇方法

將Series看作字典最欠,

Series對(duì)象提供了鍵值對(duì)的映射。

data = pd.Series(np.linspace(0.25, 1, 4), index=['a', 'b', 'c', 'd'])
data

a    0.25
b    0.50
c    0.75
d    1.00
dtype: float64

data['b']

0.5

# 用Python字典的表達(dá)式和方法來檢測鍵/索引和值:
'a' in data

True

data.keys()

Index(['a', 'b', 'c', 'd'], dtype='object')

data.items()

<zip at 0x84775c8>

list(data.items())

[('a', 0.25), ('b', 0.5), ('c', 0.75), ('d', 1.0)]

# 增加新的索引值擴(kuò)展Series
data['e'] = 1.25

將Series看作一維數(shù)組惩猫,

具備和Numpy數(shù)組一樣的數(shù)組數(shù)據(jù)選擇功能芝硬,包括索引、掩碼轧房、花哨的索引操作拌阴。

# 將顯式索引作為切片
data['a':'c']

a    0.25
b    0.50
c    0.75
dtype: float64

# 將隱式整數(shù)索引作為切片
data[0:2]

a    0.25
b    0.50
dtype: float64

# 掩碼
data[(data > 0.3) & (data < 0.8)]

b    0.50
c    0.75
dtype: float64

# 花哨的索引
data[['a', 'e']]

a    0.25
e    1.25
dtype: float64

當(dāng)使用顯式索引(即
data['a':'c'])作切片時(shí),結(jié)果包含最后一個(gè)索引奶镶;而當(dāng)使用隱式索引(即 data[0:2])
作切片時(shí)迟赃,結(jié)果不包含最后一個(gè)索引。

索引器:loc厂镇、iloc和ix纤壁,

如果Series是顯式整數(shù)索引,那么data[1]這樣的取值操作會(huì)使用顯式索引剪撬,而data[1:3]這樣的切片操作會(huì)使用隱式索引摄乒。

data = pd.Series(['a', 'b', 'c'], index=(1, 3, 5))
data

1    a
3    b
5    c
dtype: object

# 取值操作是顯式索引
data[1]

'a'

# 切片操作是隱式索引
data[1:3]

3    b
5    c
dtype: object

Pandas提供的索引器(indexer)屬性來取值的方法不是Series對(duì)象的函數(shù)方法,而是暴露切片接口的屬性残黑。

第一種索引器是loc屬性,表示取值和切片都是顯式的:

data.loc[1]

'a'

data.loc[1:3]

1    a
3    b
dtype: object

第二種是iloc屬性斋否,表示取值和切片都是Python形式(從0開始梨水,左閉右開區(qū)間)的隱式索引:

data.iloc[1]

'b'

data.iloc[1:3]

3    b
5    c
dtype: object

第三種取值屬性是ix,它是前兩種索引器的混合形式茵臭。在Series對(duì)象中ix等價(jià)于標(biāo)準(zhǔn)的[](Python列表)取值方式疫诽。

在處理整數(shù)索引的對(duì)象時(shí),強(qiáng)烈推進(jìn)使用索引器旦委,可以讓代碼閱讀和理解起來更容易奇徒,也能避免因誤用索引/切片而產(chǎn)生的小bug。

DataFrame數(shù)據(jù)選擇方法

將DataFrame看作字典缨硝,

把DataFrame當(dāng)作一個(gè)由若干Series對(duì)象構(gòu)成的字典摩钙。

area = pd.Series({'Guangzhou':55555, 'Shenzhen':44444, 'Dongguan':33333, 'Foshan':22222, 'Zhuhai':11111})
pop = pd.Series({'Guangzhou':51, 'Shenzhen':42, 'Dongguan':33, 'Foshan':24, 'Zhuhai':15})
data = pd.DataFrame({'area':area, 'pop':pop})
data

area pop
Dongguan 33333 33
Foshan 22222 24
Guangzhou 55555 51
Shenzhen 44444 42
Zhuhai 11111 15

兩個(gè)Series分別構(gòu)成DataFrame的一列,可以通過對(duì)列名進(jìn)行字典型是的取值獲取數(shù)據(jù)查辩。

data['area']

Dongguan     33333
Foshan       22222
Guangzhou    55555
Shenzhen     44444
Zhuhai       11111
Name: area, dtype: int64

# 用字典形式語法調(diào)整對(duì)象
data['density'] = data['pop']/data['area']
data

area pop density
Dongguan 33333 33 0.000990
Foshan 22222 24 0.001080
Guangzhou 55555 51 0.000918
Shenzhen 44444 42 0.000945
Zhuhai 11111 15 0.001350

將DataFrame看作二維數(shù)組胖笛,

data.values

array([[  3.33330000e+04,   3.30000000e+01,   9.90009900e-04],
       [  2.22220000e+04,   2.40000000e+01,   1.08001080e-03],
       [  5.55550000e+04,   5.10000000e+01,   9.18009180e-04],
       [  4.44440000e+04,   4.20000000e+01,   9.45009450e-04],
       [  1.11110000e+04,   1.50000000e+01,   1.35001350e-03]])

data.T

Dongguan Foshan Guangzhou Shenzhen Zhuhai
area 33333.00000 22222.00000 55555.000000 44444.000000 11111.00000
pop 33.00000 24.00000 51.000000 42.000000 15.00000
density 0.00099 0.00108 0.000918 0.000945 0.00135
data.values[0]

array([  3.33330000e+04,   3.30000000e+01,   9.90009900e-04])

data['area']

Dongguan     33333
Foshan       22222
Guangzhou    55555
Shenzhen     44444
Zhuhai       11111
Name: area, dtype: int64

Pandas索引器loc网持、iloc和ix,

通過iloc索引器长踊,像對(duì)待Numpy數(shù)組一樣索引Pandas的底層數(shù)組(Python的隱式索引)功舀,DataFrame的行列標(biāo)簽會(huì)自動(dòng)保留在結(jié)果中。

data.iloc[:3, :2]

area pop
Dongguan 33333 33
Foshan 22222 24
Guangzhou 55555 51
data.loc[:'Guangzhou', :'pop']

area pop
Dongguan 33333 33
Foshan 22222 24
Guangzhou 55555 51
# ix索引器實(shí)現(xiàn)混合效果
data.ix[:3, :'pop']

D:\Anaconda3\envs\py36env\lib\site-packages\ipykernel_launcher.py:2: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated

area pop
Dongguan 33333 33
Foshan 22222 24
Guangzhou 55555 51

loc屬性身弊,表示取值和切片都是顯式的辟汰。

data.loc[data.index[[0,2]], ['area', 'pop']]

area pop
Dongguan 33333 33
Guangzhou 55555 51
data.loc[data.index[[0,2]], 'area':'pop']

area pop
Dongguan 33333 33
Guangzhou 55555 51
data.loc[:, ['area', 'pop']]

area pop
Dongguan 33333 33
Foshan 22222 24
Guangzhou 55555 51
Shenzhen 44444 42
Zhuhai 11111 15
data.loc[:'Guangzhou', :'pop']

area pop
Dongguan 33333 33
Foshan 22222 24
Guangzhou 55555 51

iloc屬性,表示取值和切片都是Python形式的(從0開始阱佛,左閉右開區(qū)間)隱式索引帖汞。

data.iloc[[0,2], data.columns.get_loc('pop')]

Dongguan     33
Guangzhou    51
Name: pop, dtype: int64

data.iloc[0:2, data.columns.get_indexer(['area', 'pop'])]

area pop
Dongguan 33333 33
Foshan 22222 24
data.iloc[0:2, 0:2]

area pop
Dongguan 33333 33
Foshan 22222 24

如果對(duì)單個(gè)標(biāo)簽取值就選擇列,而對(duì)多個(gè)標(biāo)簽用切片就選擇行瘫絮。

data['area']

Dongguan     33333
Foshan       22222
Guangzhou    55555
Shenzhen     44444
Zhuhai       11111
Name: area, dtype: int64

data['Dongguan':'Guangzhou']

area pop density
Dongguan 33333 33 0.000990
Foshan 22222 24 0.001080
Guangzhou 55555 51 0.000918

本文首發(fā)于steem涨冀,感謝閱讀,轉(zhuǎn)載請注明麦萤。

https://steemit.com/@padluo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹿鳖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子壮莹,更是在濱河造成了極大的恐慌翅帜,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件命满,死亡現(xiàn)場離奇詭異涝滴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胶台,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門歼疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诈唬,你說我怎么就攤上這事韩脏。” “怎么了铸磅?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵赡矢,是天一觀的道長。 經(jīng)常有香客問我阅仔,道長吹散,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任八酒,我火速辦了婚禮空民,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丘跌。我一直安慰自己袭景,他們只是感情好唁桩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耸棒,像睡著了一般荒澡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上与殃,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天单山,我揣著相機(jī)與錄音,去河邊找鬼幅疼。 笑死米奸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爽篷。 我是一名探鬼主播悴晰,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逐工!你這毒婦竟也來了铡溪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤泪喊,失蹤者是張志新(化名)和其女友劉穎棕硫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袒啼,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哈扮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚓再。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滑肉。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摘仅,靈堂內(nèi)的尸體忽然破棺而出赦邻,到底是詐尸還是另有隱情,我是刑警寧澤实檀,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站按声,受9級(jí)特大地震影響膳犹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜签则,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一须床、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧渐裂,春花似錦豺旬、人聲如沸钠惩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篓跛。三九已至,卻和暖如春坦刀,著一層夾襖步出監(jiān)牢的瞬間愧沟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工鲤遥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沐寺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓盖奈,卻偏偏與公主長得像混坞,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钢坦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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