Python 學習 第十二篇:pandas

pandas是基於NumPy構建的模塊,含有使數據分析更快更簡單的操做工具和數據結構,最經常使用的數據結構是:序列Series和數據框DataFrame,Series相似於numpy中的一維數組,相似於關係表的一列;而DataFrame相似於二維的關係表。html

>>> import pandas as pd
>>> from pandas import Series,DataFrame

一,數據類型

用dtype屬性來顯示元素的數據類型,pandas主要有如下幾種dtype:linux

  • object:表示字符串類型
  • int:表示整數類型
  • float:表示浮點數類型
  • datetime:表示時間類型
  • bool:表示布爾類型

二,序列

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對象:

  • obj[col]:選取DataFrame對象的單個列或一組列
  • obj.ix[row]:選取DataFrame對象的單行或一組行
  • obj.ix[:,col]:和obj[col]的做用相同,
  • obj.ix[row:col]:同時選取DataFrame對象的行和列
  • icol,irow:根據整數位置選取單列或單行

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):

參數註釋:

  • labels:一個字符或者數值,或者是字符或數值的列表,和axis搭配,表示行索引或列索引
  • axis:axis=0表示行,axis=1表示列
  • columns:表示DataFrame對象的列名
  • index:表示DataFrame或Series對象的index, 如index=1, index='a'
  • inplace:True表示刪除某行後原dataframe變化,False不改變原始dataframe

注意:對於 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)

五,apply和applymap

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選項:

  • average:默認,在相等分組中,爲各個值分配平均排名
  • min:使用整個分組的最小排名
  • max:使用整個分組的最大排名
  • first:按值在原始數據中出現的順序分配排名

七,聚合和計算描述性統計

pandas中的聚合函數:

  • count:非NA值的數量
  • desribe:針對Series或DataFrame各列計算彙總統計
  • min、max:計算最值
  • argmin、argmax:計算最值的索引位置
  • idxmin、idxmax:計算最值的索引值
  • quantile:分位數
  • sum、mean、median:值的總和,均值和中位數
  • cumsum:累計和
  • pct_change:計算百分數變化

這些函數的參數一般是:

  • axis:默認值是0,DataFrame對象的行是0,列是1
  • skipna:默認值是True,跳過缺失值

八,處理缺失值

缺失值NA是指數值類型的NaN和None,NaN能夠使用numpy.nan來設置。

from numpy import nan as NA

處理缺失值的方法:

  • dropna:刪除有缺失值的行或列
  • fillna:用指定值填充缺失值
  • isnull:返回一個含有布爾值的對象,表示哪些值是缺失值
  • notnull:返回一個含有布爾值的對象,表示哪些值不是缺失值

 

參考文檔:

pandas 學習(1): pandas 數據結構之Series

Pandas簡易入門(一)

Pandas: Drop函數(Dataframe刪除指定行列)

相關文章
相關標籤/搜索