python-pandas之Index數據分析(六)

索引對象
'''
數據結構 索引對象
? Pandas的索引對象負責管理軸標簽和其他元數據(比如軸名稱等)。構建
Series或DataFrame時,所用到的任何數組或其他序列的標簽都會被轉換成一
個Index。
? Index對象是不可修改的(immutable),因此用戶不能對其進行修改。不可
修改性非常重要,因為這樣才能使Index對象在多個數據結構之間安全共享。
? pandas中主要的index對象
類型 說明
index 最泛化的Index對象,將軸標簽為一個由Python對象組成的NumPy數組。
Int64Index 針對整數的特殊Index
MultiIndex “層次化”索引對象,表示單個軸上的多層索引??梢钥醋鲇蓤@數組組成的數
組。
DatetimeIndex 存儲納秒級時間戳
PeriodIndex 針對Period數據的特殊Index
? Index的方法和屬性 I
類型 說明
append append 連接另一個Index對象,產生一個新的Index。
diff 計算差集,并得到一個Index。
intersection 計算交集
union 計算并集
isin 計算一個指示各值是否包含在參數集合中的布爾型數組
delete 刪除索引i處的元素,并得到新的Index。
? Index的方法和屬性 II
類型 說明
drop 刪除傳入的值,并得到新的索引。
insert 將元素插入到索引i處,并得到新的Index。
is_monotonic 當各元素均大于等于前一個元素時,返回True。
is_unique 當Index沒有重復值時,返回True。
unique 計算Index中唯一值得數組
'''
import numpy as np
import pandas as pd
import sys
from pandas import Series,DataFrame,Index
print('獲取index')
obj = Series(range(3),index=['a','b','c'])
index = obj.index
print(index[1:]) #打印index從1開始的所有索引
try:
index[1] = 'd' #Index對象是不可修改的(immutable),因此用戶不能對其進行修改。不
except:
print(sys.exc_info()[0])
print('Index對象')
index = Index(np.arange(3))
obj2 = Series([1.6,23.3,6],index= index)
print(obj2)
print('判斷列和索引是否存在')
pop = {'Nevada':{20001:2.4, 2002:2.9},
'Ohio':{2000:1.5, 2001:1.7, 2002:3.6}}
frame3 = DataFrame(pop)
print(frame3)
print('Ohio'in frame3.columns) # True
print('3923' in frame3.index) # False
重新索引
'''
基本功能 重新索引
? 創建一個適應新索引的新對象,該Series的reindex將會根據新索引進行重排。
如果某個索引值當前不存在,就引入缺失值
? 對于時間序列這樣的有序數據,重新索引時可能需要做一些插值處理。
method選項即可達到此目的。
? reindex函數的參數
類型 說明
index 用作索引的新序列。既可以是Index實例,也可以是其它序列型的Python數據
結構。Index會被完全使用,就像沒有任何復制一樣。
method 插值填充方式,ffill或bfill。
fill_value 在重新索引過程中,需要引入缺失值時使用的替代值。
limit 前向或后向填充時的最大填充量
level 在MultiIndex的指定級別上匹配簡單索引,否則選取其子集。
copy 默認為True,無論如何都復制。如果為False,則新舊相等就不復制。
'''
import numpy as np
from pandas import DataFrame,Series
print('重新指定索引及順序')
obj = Series([3.4,5.4,5.6,-4],index=['d', 'b', 'a', 'c'])
print(obj)
obj2 = obj.reindex(['a', 'b', 'd', 'c', 'e'])
print('重新指定索引obj2\n',obj2)
print('指定不存在元素的默認值')
print(obj.reindex(['a', 'b', 'd', 'c', 'e'], fill_value = 0)) # 指定不存在元素的默認值
print('重新指定索引并指定填元素充方法')
obj3 = Series(['libai','dufu','tangshi'],index=[0,2,4])
print(obj3)
print(obj3.reindex(range(6),method='ffill')) #method 插值填充方式,ffill或bfill。
print('對DataFrame重新指定索引')
frame = DataFrame(np.arange(9).reshape(3, 3),
index = ['a', 'c', 'd'],
columns = ['Ohio', 'Texas', 'California'])
print(frame)
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
print(frame2)
print('重新指定column')
states = ['Texas', 'Utah', 'California']
print(frame.reindex(columns = states))
print('對DataFrame重新指定索引并指定填元素充方法')
print(frame.reindex(index = ['a', 'b', 'c','d'],
# method='ffill',
columns = states))
print(frame.ix[['a', 'b', 'd', 'c'], states])
刪除索引上的值
'''
基本功能 丟棄指定軸上的項
? 丟棄某條軸上的一個或多個項很簡單,只要有一個索引數組或列表即可。由于
需要執行一些數據整理和集合邏輯,所以drop方法返回的是一個在指定軸上刪
除了指定值的新對象
'''
import numpy as np
from pandas import Series,DataFrame
print('Series根據索引刪除元素')
obj = Series(np.arange(5),index=['a','b','c','d','e'])
obj2 = obj.drop('c')
print(obj2) #刪除C索引對應的值
print(obj.drop(['d','e']))
print('DataFrame刪除元素,可指定索引或列。')
data = DataFrame(np.arange(16).reshape((4,4)),
index=['A','B','C','D'],
columns=['N1','N2','N3','N4'])
print(data)
print('刪除A行的元素')
print(data.drop('A'))
print('刪除N1列的元素')
print(data.drop('N1',axis=1))
print(data.drop(['N1','N3'],axis=1))
索引、選取和過濾
'''
基本功能 索引、選取和過濾
? Series索引(obj[...])的工作方式類似于NumPy數組的索引,只不過Series的
索引值不只是整數。
? 利用標簽的切片運算與普通的Python切片運算不同,其末端是包含的
(inclusive)。
? 對DataFrame進行索引其實就是獲取一個或多個列
? 為了在DataFrame的行上進行標簽索引,引入了專門的索引字段ix。
? DataFrame的索引選項
類型 說明
obj[val] 選取DataFrame的單個列或一組列。在一些特殊情況下會比較便利:布爾型數組(過濾
行)、切片(行切片)、布爾型DataFrame(根據條件設置值)。
obj.ix[val] 選取DataFrame的單個行或一組行
obj.ix[:, val] 選取單個列或列子集
obj.ix[val1, val] 同時選取行或列
reindex方法 將一個或多個軸匹配到新索引
xs方法 根據標簽選取單行或單列,并返回一個Series。
icol、irow方法 根據整數位置選取單行或單列,并返回一個Series。
get_value、set_value方法 根據行標簽或列標簽選取單個值
'''
import numpy as np
from pandas import Series,DataFrame
print('Series的索引,默認數字索引可以工作。')
obj = Series(np.arange(4),index=['a','b','c','d'])
print('obj的b索引對應的值')
print(obj['b'])
print(obj[2])
print(obj[[2,3]])
print(obj[obj<2])
print('Series的數組切片')
print(obj['b':'c']) # 閉區間
obj['b':'c'] = 5 #將b和c索引的值重新賦值
print(obj)
print('DataFrame的索引')
data = DataFrame(np.arange(16).reshape((4,4)),
index=['A','B','C','D'],
columns=['N1','N2','N3','N4'])
print(data['N1']) #打印N1列元素
print('打印N1、N3列元素,同時顯示行索引\n',data[['N1','N3']])#打印N1、N3列元素,同時顯示行索引
print('分片方式打印前兩行元素\n',data[:2])
print('指定索引和列')
print(data.ix['B',['N2','N4']])
print('指定行索引顯示A和B,列索引將按照3,0,1順序顯示即N4,N1,N2')
print(data.ix[['A', 'B'], [3, 0, 1]])
print(data.ix[0]) #打印第一行
print(data.ix[:'C', 'N2']) # 從A到C行的第2列元素顯示。
print('根據條件選擇')
print(data[data.N3>3]) #帥選第三列大于3的元素
print(data<5) # 打印True或者False
data[data < 5] = 0 #將小于5的元素填充為0
print(data)
Python 數據挖掘
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。