pandas索引物件

2021-07-31 20:10:49 字數 3415 閱讀 5994

《python for data analysis》

index物件是不可修改的(immutable),這樣才能使index物件在多個資料結構之間安全共享。

in [1]: import pandas as pd

in [2]: from pandas import series, dataframe

in [3]: import numpy as np

in [4]: index = pd.index(np.arange(3))

in [5]: index

out[5]: int64index([0, 1, 2], dtype='int64')

in [6]: obj = series([1.5,2.5,0],index = index)

in [7]: obj

out[7]:

01.5

12.5

20.0

dtype: float64

reindex建立乙個適應新索引的新物件。

呼叫該series的reindex將會根據新索引進行重排。如果某個索引值當前不存在,就引入缺失值。預設nan

in [15]: obj.reindex([0,1,2,3])

out[15]:

01.5

12.5

20.0

3 nan

dtype: float64

可以選fill_value = 0

in [16]: obj.reindex([0,1,2,3], fill_value=0)

out[16]:

01.5

12.5

20.0

30.0

dtype: float64

對於時間序列這樣的有序資料,重新索引時可能需要一些插值處理。method選項即可達到此目的,例如,使用ffill可以實現前向值填充

in [19]: obj1.reindex(range(6), method='ffill')

out[19]:

0 blue

1 blue

2 green

3 green

4 red

5 red

dtype: object

對於dataframe, reindex可以修改行索引、列索引,或兩個都修改。如果僅傳入乙個序列,預設索引行。使用columns關鍵字即可重新索引列。插值只能按應用,即軸0.

利用ix標籤索引功能,重新索引任務可以變的更加簡潔:

in [26]: frame = dataframe(np.arange(9).reshape((3,3)))

in [27]: frame

out[27]:

0120012

1345

2678

in [28]: frame.ix[[0,1,2], ['a','b','c']]

out[28]:

a b c

0 nan nan nan

1 nan nan nan

2 nan nan nan

in [29]: frame.ix[[0,1,2], [0,'b',2]]

out[29]:

0 b 2

00 nan 2

13 nan 5

26 nan 8

drop方法返回乙個在指定軸上刪除了指定值得新物件。

利用++標籤++的切片運算於普通的python切片運算不同,++其末端是包含的++!!!即封閉區間。

為了dataframe的行上進行標籤索引,引入了專門的索引字段ix

型別說明

obj[val]

選取dataframe的單個列或一組列。

obj.ix[val]

選取dataframe的單個行或一組行。

obj.ix[:,val]

選取單個列或列子集

obj.ix[val1,val2]

同時選取行和列

reindex

將乙個或多個軸匹配到新索引

建立乙個series,並用乙個由列表或陣列組成的列表作為索引。

層次化索引的series可以通過其unstack方法被重新安排到乙個dataframe中。

unstack的逆運算是stack。

dataframe的set_index函式會將其乙個或多個列轉換為行索引,並建立乙個新的dataframe.

reset_index的功能跟set_index剛好相反,層次化索引的級別會被轉移到列裡面。類似於(unstackstack的關係)

rename實現了複製dataframe並對其索引和列標籤進行賦值。如果希望就地修改某個資料集,傳入inplace=true即可。

example 1:

title_test1 = title_test1.set_index('label')# 將『label』列作為索引

example 2:

accepted_answers = answers[answers.isacceptedanswer == true]

accepted_answers["owneruserid"].value_counts().head(10).plot(kind="barh")

accepted_answers = accepted_answers.drop(['id','creationdate','score','isacceptedanswer' ,'body'], axis=1)

'parentid' : 'id'}

accepted_answers = accepted_answers.dropna()

count = accepted_answers['expertid'].value_counts()

count_df = pd.dataframe(count)

count_df = count_df.reset_index()

'index' : 'expertid'}

pandas 索引切片

ser1 pd.series range 10,15 index list abcde print ser1 普通索引 print ser1 a print ser1 0 print 注意通過自定義索引的左閉右閉的,用預設索引 下標 是左閉右開的 print ser1 a c print ser1 ...

Pandas整數索引

在pandas上使用整數索引容易產生歧義,因為它和在列表 元組內構建資料結構進行索引有一點不同。1.整數索引 如下 ser pd.series np.arange 3.ser 1 返回的結果為 traceback most recent call last file g soft anaconda ...

pandas 索引筆記

1 import pandas as pd 2import numpy as np 34 s pd.series np.random.rand 5 index list abcde 5 建立序列,其中 index list abcde 為每一行新增索引 6 s.index.name alpha 為行...