pandas簡介:pandas包含的數據結構和數據處理工具的設計使得利用進行數據清洗和數據分析非常快捷;與numpy的區別,pandas用來處理表格型或異質型數據的,而numpy更適合處理同質型的數值類數據。
1、Series簡介
1、Series是一種一維的數組型對象,包含以一個值序列,并且包含數組標簽(稱為索引),
pd.Series([4,7,-5,9]) # 不指定標簽時,默認索引值和numpy數組相似 >>>Out[108]: 0 4 1 7 2 -5 3 9 dtype: int64pd.Series([4,7,-5,9],index=['b','a','c','d']) # 指定標簽,標簽可以是字符串 >>>Out[109]: b 4 a 7 c -5 d 9 dtype: int64
2、Series與numpy函數相類似的操作風格:布爾值過濾數據、與標量相乘、應用數學函數等,這些操作將保持索引值鏈接。
obj = pd.Series([4,7,-5,9],index=['b','a','c','d']) obj >>>Out[111]: b 4 a 7 c -5 d 9 dtype: int64
obj2[obj2 > 0] # 布爾值過濾obj2 * 2 # 標量操作 np.exp(obj2) # 數學函數操作'b' in obj2 # 邏輯判斷 'e' in obj2
3、從兩外一個角度考慮Series,可以認為它是一個長度固定且有序的字典。可以將字典型的數據直接轉換成Series型數據,并且在將字典傳遞給Series構造函數時,可以通過指定字典鍵的順序使產生的Series保持一定的順序。
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} obj1 = pd.Series(sdata) obj1 >>>Out[5]: Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64states = ['California', 'Ohio', 'Oregon', 'Texas'] # 指定標簽順序 obj2 = pd.Series(sdata,index=states) obj2 >>>Out[9]: *** NaN使是pandas標記缺失值或NA值的方式
California NaN Ohio 35000.0 Oregon 16000.0 Texas 71000.0
pd.isnull(obj2) #?pandas中使用isnull和notnull函數來檢查數據缺失。
>>>Out[10]:
California True
Ohio False
Oregon False
Texas False
dtype: bool
4、Series自動對齊索引和Series對象自身和其索引都有name屬性
***前面的obj1和 obj2相加
obj1 + obj2 >>>Out[13]: California NaN Ohio 70000.0 Oregon 32000.0 Texas 142000.0 Utah NaN dtype: float64
obj2.name = 'population' # 指定name屬性
obj2.index.name = 'state'
obj2
>>>Out[15]:
state
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
Name: population, dtype: float64
?
?
2、DataFrame簡介
1、DataFrame表示的是矩陣的數據表,既有行索引也有列索引,每一列可以是不同的值類型;DataFrame本身是二維的,但是可以分層索引在DataFrame中展現更高維度的數據。
2、DataFrame有多種創建方式,常用方式是利用包含等長度列表或NumPy數組的字典來形成DataFrame;如果指定順序,DataFrame的列將會按照指定順序排列;
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]} import pandas as pd frame = pd.DataFrame(data) frame >>>Out[5]: pop state year 0 1.5 Ohio 2000 1 1.7 Ohio 2001 2 3.6 Ohio 2002 3 2.4 Nevada 2001 4 2.9 Nevada 2002 5 3.2 Nevada 2003
pd.DataFrame(data, columns=['year', 'state', 'pop']) # DataFrame的列會按照指定的順序排列
>>>Out[6]:
year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9
5 2003 Nevada 3.2
frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], # 若傳入的指定的列不存在,將會出現缺失值;可以修改默認標簽
index=['one', 'two', 'three', 'four','five', 'six'])
frame2
>>>Out[8]:
year state pop debt
one 2000 Ohio 1.5 NaN
two 2001 Ohio 1.7 NaN
three 2002 Ohio 3.6 NaN
four 2001 Nevada 2.4 NaN
five 2002 Nevada 2.9 NaN
six 2003 Nevada 3.2 NaN
?
3、DataFrame中的一列可以按照字典標記或屬性那樣檢索為Series.? 格式:frame2['state']、frame2.year;x.columns會給出所有的標簽。
frame2.year >>>Out[10]: one 2000 two 2001 three 2002 four 2001 five 2002 six 2003 Name: year, dtype: int64
4、對于大型的DataFrame,head()方法將來列出頭部的5行;DataFrame中選取的列是數據的視圖,而不是復制,因此對Series的修改會映射到DataFrame中,需要復制一列的話,采用Series的copy方法,格式:pd.Series.copy(x.column);如果需要復制DataFrame,格式:x.copy([len])。
5、采用包含字典的嵌套字典創建DataFrame;
pop = {'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}} frame3 = pd.DataFrame(pop) frame3 >>>Out[34]: # 字典的鍵作為列,內部字典的鍵值作為行Nevada Ohio 2000 NaN 1.5 2001 2.4 1.7 2002 2.9 3.6
6、pandas中的索引對象是用于存儲軸標簽和其他元數據的,在構造Series和DataFrame時,使用的任意數組或標簽序列都可以在內部轉換成索引對象,索引對象也包含一系列方法,p135。
obj = pd.Series(range(3), index=['a', 'b', 'c']) index = obj.index index # 索引對象是不可變的,用于無法對索引對象進行修改(嘗試修改時會報錯); >>> Out[10]: Index(['a', 'b', 'c'], dtype='object')
?