《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
剛好相反,層次化索引的級別會被轉移到列裡面。類似於(unstack
與stack
的關係)
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 為行...