Python Pandas 使用[ ]進(jìn)行數(shù)據(jù)操作

Python Pandas 使用[ ]進(jìn)行數(shù)據(jù)操作

本文將介紹Pandas中“[ ]”的一些相關(guān)操作唉擂,如進(jìn)行數(shù)據(jù)選擇及更改晃酒。

“[ ]” 應(yīng)該是最基本的選擇數(shù)據(jù)的方法臀晃,下面是可以向其中傳入的類型:

  • 可以直接傳入column;
  • 也可以傳入column list;
  • 使用切片;
  • 使用布爾索引炮沐。

讀入數(shù)據(jù)

import pandas as pd
import numpy as np
import seaborn as sns
df
dates = pd.date_range('1/1/2020', periods=8)
df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=list('ABCD'))
df

out:
    A   B   C   D
2020-01-01  0.336131    -0.086456   0.096903    -1.230599
2020-01-02  -0.106293   0.111821    1.165342    -1.378462
2020-01-03  -0.933779   0.898738    0.013194    -0.593243
2020-01-04  0.190229    -1.108908   0.597650    2.759475
2020-01-05  -0.647080   1.573537    1.357191    -0.536916
2020-01-06  -0.455373   1.342904    -0.316548   0.145119
2020-01-07  -1.350214   -0.044642   0.501508    1.969973
2020-01-08  -0.474602   -0.384916   1.829222    0.853519

傳入列表

傳入列表己沛,并以列表順序讀取慌核,返回 DataFrame對(duì)象。

df[['C','D']]

    C   D
2020-01-01  0.096903    -1.230599
2020-01-02  1.165342    -1.378462
2020-01-03  0.013194    -0.593243
2020-01-04  0.597650    2.759475
2020-01-05  1.357191    -0.536916
2020-01-06  -0.316548   0.145119
2020-01-07  0.501508    1.969973
2020-01-08  1.829222    0.853519

傳入單列

如果單獨(dú)傳入某一列申尼,則返回series對(duì)象;如果傳入列表垫桂,則返回DataFrame對(duì)象师幕,即使列表的長(zhǎng)度為1.

df['C']

out:
2020-01-01    0.096903
2020-01-02    1.165342
2020-01-03    0.013194
2020-01-04    0.597650
2020-01-05    1.357191
2020-01-06   -0.316548
2020-01-07    0.501508
2020-01-08    1.829222
Freq: D, Name: C, dtype: float64
df[['C']]

out:
2020-01-01  0.096903
2020-01-02  1.165342
2020-01-03  0.013194
2020-01-04  0.597650
2020-01-05  1.357191
2020-01-06  -0.316548
2020-01-07  0.501508
2020-01-08  1.829222

可以用來(lái)交換列值。

df[['A','B']] = df[['B','A']]
df

out:
    A   B   C   D
2020-01-01  -0.086456   0.336131    0.096903    -1.230599
2020-01-02  0.111821    -0.106293   1.165342    -1.378462
2020-01-03  0.898738    -0.933779   0.013194    -0.593243
2020-01-04  -1.108908   0.190229    0.597650    2.759475
2020-01-05  1.573537    -0.647080   1.357191    -0.536916
2020-01-06  1.342904    -0.455373   -0.316548   0.145119
2020-01-07  -0.044642   -1.350214   0.501508    1.969973
2020-01-08  -0.384916   -0.474602   1.829222    0.853519

如下所示是另一種交換子集的方法。

df.loc[:, ['A', 'B']] = df[['B', 'A']]
df.loc[:, ['A', 'B']] = df[['B', 'A']]
df

out:
    A   B   C   D
2020-01-01  -0.086456   0.336131    0.096903    -1.230599
2020-01-02  0.111821    -0.106293   1.165342    -1.378462
2020-01-03  0.898738    -0.933779   0.013194    -0.593243
2020-01-04  -1.108908   0.190229    0.597650    2.759475
2020-01-05  1.573537    -0.647080   1.357191    -0.536916
2020-01-06  1.342904    -0.455373   -0.316548   0.145119
2020-01-07  -0.044642   -1.350214   0.501508    1.969973
2020-01-08  -0.384916   -0.474602   1.829222    0.853519

上面的操作不會(huì)交換列值霹粥,交換列值需要使用值來(lái)交換灭将。

df.loc[:, ['A', 'B']] = df[['B', 'A']].values
df

out:
A   B   C   D
2020-01-01  0.336131    -0.086456   0.096903    -1.230599
2020-01-02  -0.106293   0.111821    1.165342    -1.378462
2020-01-03  -0.933779   0.898738    0.013194    -0.593243
2020-01-04  0.190229    -1.108908   0.597650    2.759475
2020-01-05  -0.647080   1.573537    1.357191    -0.536916
2020-01-06  -0.455373   1.342904    -0.316548   0.145119
2020-01-07  -1.350214   -0.044642   0.501508    1.969973
2020-01-08  -0.474602   -0.384916   1.829222    0.853519

使用to_numpy()也可以進(jìn)行交換。

df.loc[:, ['A', 'B']] = df[['B', 'A']].to_numpy()
df

out:
A   B   C   D
2020-01-01  -0.086456   0.336131    0.096903    -1.230599
2020-01-02  0.111821    -0.106293   1.165342    -1.378462
2020-01-03  0.898738    -0.933779   0.013194    -0.593243
2020-01-04  -1.108908   0.190229    0.597650    2.759475
2020-01-05  1.573537    -0.647080   1.357191    -0.536916
2020-01-06  1.342904    -0.455373   -0.316548   0.145119
2020-01-07  -0.044642   -1.350214   0.501508    1.969973
2020-01-08  -0.384916   -0.474602   1.829222    0.853519

使用切片

獲取前兩行數(shù)據(jù)

df[:2]

out:
A   B   C   D
2020-01-01  -0.086456   0.336131    0.096903    -1.230599
2020-01-02  1.000000    2.000000    5.000000    6.000000

設(shè)置步長(zhǎng)

df[::2]

out:
A   B   C   D
2020-01-01  -0.086456   0.336131    0.096903    -1.230599
2020-01-03  0.898738    -0.933779   0.013194    -0.593243
2020-01-05  1.573537    -0.647080   1.357191    -0.536916
2020-01-07  -0.044642   -1.350214   0.501508    1.969973
df[1::2]

out:
A   B   C   D
2020-01-02  4.000000    5.000000    6.000000    7.000000
2020-01-04  -1.108908   0.190229    0.597650    2.759475
2020-01-06  1.342904    -0.455373   -0.316548   0.145119
2020-01-08  -0.384916   -0.474602   1.829222    0.853519

將數(shù)據(jù)逆序排列

df[::-1]

out:
A   B   C   D
2020-01-08  -0.384916   -0.474602   1.829222    0.853519
2020-01-07  -0.044642   -1.350214   0.501508    1.969973
2020-01-06  1.342904    -0.455373   -0.316548   0.145119
2020-01-05  1.573537    -0.647080   1.357191    -0.536916
2020-01-04  -1.108908   0.190229    0.597650    2.759475
2020-01-03  0.898738    -0.933779   0.013194    -0.593243
2020-01-02  1.000000    2.000000    5.000000    6.000000
2020-01-01  -0.086456   0.336131    0.096903    -1.230599

使用切片進(jìn)行賦值

df[:2] = np.arange(8).reshape(2,4)
df

out:
A   B   C   D
2020-01-01  0.000000    1.000000    2.000000    3.000000
2020-01-02  4.000000    5.000000    6.000000    7.000000
2020-01-03  0.898738    -0.933779   0.013194    -0.593243
2020-01-04  -1.108908   0.190229    0.597650    2.759475
2020-01-05  1.573537    -0.647080   1.357191    -0.536916
2020-01-06  1.342904    -0.455373   -0.316548   0.145119
2020-01-07  -0.044642   -1.350214   0.501508    1.969973
2020-01-08  -0.384916   -0.474602   1.829222    0.853519

使用布爾索引

df = pd.DataFrame(np.random.randn(8,4),index=dates,columns=list('abcd'))
df

out:
a   b   c   d
2020-01-01  -1.749988   -0.249398   -1.165277   -0.806687
2020-01-02  0.026334    0.158118    0.341183    -1.042534
2020-01-03  0.513027    -0.127235   -0.454433   -0.162600
2020-01-04  1.719313    -1.417885   0.267647    -0.960537
2020-01-05  -0.259797   -0.851702   -0.873451   -0.476420
2020-01-06  -0.048619   -0.690095   0.759120    1.184295
2020-01-07  -0.748535   -1.252718   0.386220    -0.415996
2020-01-08  -0.497471   -0.550428   -0.867333   -0.109223
mask = df['a'] > 0
mask

out:
2020-01-01    False
2020-01-02     True
2020-01-03     True
2020-01-04     True
2020-01-05    False
2020-01-06    False
2020-01-07    False
2020-01-08    False
Freq: D, Name: a, dtype: bool
df[mask]

out:
a   b   c   d
2020-01-02  0.026334    0.158118    0.341183    -1.042534
2020-01-03  0.513027    -0.127235   -0.454433   -0.162600
2020-01-04  1.719313    -1.417885   0.267647    -0.960537

多條件

df[mask & mask2]
mask2 = df['b'] < 0
?
df[mask & mask2]

out:
a   b   c   d
2020-01-03  0.513027    -0.127235   -0.454433   -0.162600
2020-01-04  1.719313    -1.417885   0.267647    -0.960537

使用布爾索引更改數(shù)據(jù)

df[mask & mask2] = np.arange(8).reshape(2,4)
df

out:
a   b   c   d
2020-01-01  -1.749988   -0.249398   -1.165277   -0.806687
2020-01-02  0.026334    0.158118    0.341183    -1.042534
2020-01-03  0.000000    1.000000    2.000000    3.000000
2020-01-04  4.000000    5.000000    6.000000    7.000000
2020-01-05  -0.259797   -0.851702   -0.873451   -0.476420
2020-01-06  -0.048619   -0.690095   0.759120    1.184295
2020-01-07  -0.748535   -1.252718   0.386220    -0.415996
2020-01-08  -0.497471   -0.550428   -0.867333   -0.109223
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末后控,一起剝皮案震驚了整個(gè)濱河市庙曙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浩淘,老刑警劉巖捌朴,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異张抄,居然都是意外死亡砂蔽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門署惯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)左驾,“玉大人,你說(shuō)我怎么就攤上這事极谊」钣遥” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵轻猖,是天一觀的道長(zhǎng)帆吻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蜕依,這世上最難降的妖魔是什么桅锄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮样眠,結(jié)果婚禮上友瘤,老公的妹妹穿的比我還像新娘。我一直安慰自己檐束,他們只是感情好辫秧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著被丧,像睡著了一般盟戏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甥桂,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天柿究,我揣著相機(jī)與錄音,去河邊找鬼黄选。 笑死蝇摸,一個(gè)胖子當(dāng)著我的面吹牛婶肩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播貌夕,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼律歼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了啡专?” 一聲冷哼從身側(cè)響起险毁,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎们童,沒(méi)想到半個(gè)月后畔况,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡病附,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年问窃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片完沪。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡域庇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出覆积,到底是詐尸還是另有隱情听皿,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布宽档,位于F島的核電站尉姨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吗冤。R本人自食惡果不足惜又厉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望椎瘟。 院中可真熱鬧覆致,春花似錦、人聲如沸肺蔚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宣羊。三九已至璧诵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仇冯,已是汗流浹背之宿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苛坚,地道東北人澈缺。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓坪创,卻偏偏與公主長(zhǎng)得像炕婶,于是被迫代替她去往敵國(guó)和親姐赡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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