pandas是基於NumPy構建的模塊,含有使數據分析更快更簡單的操做工具和數據結構,最經常使用的數據結構是:序列Series和數據框DataFrame,Series相似於numpy中的一維數組,相似於關係表的一列;而DataFrame相似於二維的關係表。html
>>> import pandas as pd >>> from pandas import Series,DataFrame
用dtype屬性來顯示元素的數據類型,pandas主要有如下幾種dtype:linux
Series 是由一組有序的數據以及與之相關的索引組成,能夠經過索引來訪問Series對象中的元素。數組
1,建立序列數據結構
僅使用一組數據就能夠產生最簡單的Series,此時索引是從0依次遞增的整數:app
obj=Series([4,7,-5,3])
能夠經過Series對象的values和index屬性查看序列的值和索引:函數
obj.values ## array([4,7,-5,3]) obj.index ## Int64Index([0,1,2,3])
能夠使用自定義的列表來建立序列:工具
obj=Series([4,7,-5,3],index=['d','b','a','c'])
若是數據存儲在一個Python字典結構中,也能夠直接經過字典來建立Series:學習
>>> sdata = {'b': 12, 'a': 13, 'd': 14, 'c': 10} >>> sd=pd.Series(sdata) b 12 a 13 d 14 c 10 dtype: int64
2,訪問序列的元素spa
經過索引來訪問序列的元素,並能夠修改序列元素的值.net
sd['a']=4
數據框相似於二維的關係表,含有一組有序的列,每列能夠是不一樣的數據類型;DataFrame既有行索引(index),也有列索引(columns),能夠認爲,DataFrame的每一列都是一個Series對象。
1,使用DataFrame函數來建立數據框
經過等長的字典來建立數據框,並能夠設置數據框的列名和行索引。
>>> data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], ... 'year': [2000, 2001, 2002, 2001, 2002], ... 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]} >>> row_num = ['one', 'two', 'three', 'four', 'five'] >>> col_names=['year', 'state', 'pop'] >>> df=pd.DataFrame(data,columns=col_names,index=row_num) year state pop one 2000 Ohio 1.5 two 2001 Ohio 1.7 three 2002 Ohio 3.6 four 2001 Nevada 2.4 five 2002 Nevada 2.9
2,訪問DataFrame的元素
經過列名,訪問DataFrame的元素的方法有兩種:索引方式和. 號方式,這兩種方式返回的都是數據框中一整列的數據:
df['state'] df.state
經過行索引能夠返回一整行的數據,行索引能夠經過位置或名稱來獲取,使用對象的索引字段ix:
df.ix['three']
3,修改DataFrame對象
修改已有的數據,例如,設置第一列的值,把第一列的值所有設置爲「NewYork」
df.state[0]='NewYork'
當對不存在的列賦值時,pandas會向DataFrame對象中新建一列:
df['avg_age']=34
關鍵字 del 用於刪除DataFrame中的列:
del df['age']
4,DataFrame的索引
obj是DataFrame對象,有多種方式來索引DataFrame對象:
5,遍歷DataFrame
使用iterrows() 遍歷數據框,iterrows()返回值爲元組(index,row)
for index,row in otu.iterrows(): print(index,row)
drop()函數用於刪除指定軸(Axis)上的數據項,
drop(labels=None, axis=0, index=None, columns=None,level=None, inplace=False):
參數註釋:
注意:對於 inplace參數,若是設定爲True,那麼原始序列或數據框直接被替換;若是設置inplace=False,原始序列或數據框對應的內存值並不改變,要保留函數執行的結果,須要將新的結果賦給一個新的對象。先刪除index=0的行,再刪除列名爲a的數據
1,基於index 和columns來刪除數據
先刪除index=0的行,再刪除列名爲a的數據
df.drop(index=0)
df.drop(colum='a')
2,基於labels和axis來刪除數據
先刪除 "行號爲0" 的數據,再刪除列名爲a的數據
df.drop(labels=0, axis=0)
df.drop(labels='a',axis=1)
DataFrame對象有實例級別的函數:apply()函數引用於數組級別,applymap應用於元素級別。
定義一個函數fun,使用apply()函數把fun應用到由DataFrame對象的列構成的一維數組上,一般fun函數是由聚合函數構成的。
f=lambda x: x.max()-x.min df.apply(f)
定義一個函數foo,使用applymap()函數把函數foo應用於DataFrame對象的各個元素上,
foo=lambda x: '%.2f' % x df.applymap(foo)
而Series對象有map()方法,應用於Series對象的元素上。
pandas能夠按照索引來排序,也能夠按照值來排序。
1,按照索引排序sort_index
sort_index(axis=0,ascending=True)
參數註釋:axis=0表示行,axis=1表示列;ascending=True表示按照升序排序
對於Series對象,s.sort_index() 表示按照行索引的升序來排序;
對於DataFrame對象,df.sort_indx(axis=1,ascending=False) 表示按照列名稱的降序來排序。
2,按照值來排序
對於Series對象,使用order()對值進行排序
對於DataFrame對象,使用sort_index(by='col_name'),按照列值來排序;使用sort_index(by=['col_1','col_1','col_1']),按照多個列的值來排序。
3,按照值對數據排名rank
rank(axis=0,ascending=True,method='average')
參數註釋:
axis:軸,默認值是0,表示在行上計算排名;值爲1時表示在列上計算排名
排名時用於破壞平級關係的method選項:
pandas中的聚合函數:
這些函數的參數一般是:
缺失值NA是指數值類型的NaN和None,NaN能夠使用numpy.nan來設置。
from numpy import nan as NA
處理缺失值的方法:
參考文檔: