pandas(一)

import numpy as py 數組

import pandas as pddom

 

Series對象函數

data= pd.Series([0.25,0.5,0.75,1.0])   默認索引是數字對象

data=pd.Series([0.25,0.5,0.75,1.0],index=['a','b','c','d'])   用字符串定義索引,也能夠用不連續的索引索引

data['b']   字符串

data['a':'c']  支持切片操做pandas

 

pd.Series(data,index=index)it

 

data能夠是列表或numpy數組import

pd.Series([2,4,6])numpy

也能夠是標量,建立時會重複填充到每一個索引上

pd.Series([5,index=[100,200,300])

也能夠是字典,index默認是字典的鍵

pd.Series({2:'a',3:'b'})

 

series的字典式映射方法

 data=pd.Series([0.25,0.5,0.75,1.0],

        index=['a','b','c','d'

      )

判斷data中是否有a索引

'a' in data

獲取data索引

data.keys()

獲取全部數據

list(data.items())

增長新索引

data['e']=10.25

切片:

  顯示索引作切片,包含最後一個值

  data['a':'c']

  隱式整數索引作切片,不包含年最後一個值

  data[0:2]

掩碼:

  data[(data>0.3) & (data<0.7)]

花哨索引:

  data[['a,'e']]

 

索引器:爲了防止series爲整數索引是,取值爲顯式索引,切片爲隱式索引而混淆

 

  loc:表示取值和切片都是顯式

  data=pd.Series(['a','b','c'],index=[1,3,5])

  data.loc[1]

  data.loc[1:3]

 

  iloc:表示取值和切片都是隱式

  data.iloc[1]

  data.iloc[0:2]

 

 

  

 

 

 

DataFrame對象

經過字典列表建立

  data=[{'a':i,'b':2*i} for i in range(3)]

  x=pd.DataFrame(data)

經過series對象建立

  pd.DataFrame({'data':data,'age':[1,2,3,4]) 

*注意此處data是前面series建立好的有索引的對象

經過numpy建立

pd.DataFrame(np.random.rand(3,2),

      columns=['name','age'],

      index=['a','b','c']

      )

x.index獲取行索引標籤,x.columns獲取列索引標籤

 

pandas 的index對象

建立對象

ind=pd.Index([2,5,6,7,11])

切片,索引

ind[1],ind[::2]

inda=pd.Index([1,3,5,7,9])

indb=pd.Index([2,3,5,7,11])

交集

inda & indb 

並集

inda | indb

異或

inda ^ indb

 

DataFrame數據選擇方法

 

name = pd.Series({'a':'xi','b':'lin','c':'saber'})

age = pd.Series({'a':18,'b':20,'c':'18'})

data = pd.DataFrame({'name':name,'age':age})

 

data['name'] 等價於data.name,推薦前者

data.values  查看數組數據

data.values[0] 查看第一行數據

data.T 轉置

 

loc,iloc與series對象中的用法相同

data.loc[:'lin',:'age']

data.iloc[:3,:2]

ix混合使用,不經常使用

data.ix[:3,:'age']

與掩碼和花哨索引結合使用

data.loc[data.age>18,['name','age']]

更新數據

data[0,1]= 20

numpy通用函數pandas也適用

 

當用兩個series對象建立dataframe對象時,會取兩個對象的並集,沒有的用nan代替

兩個dataframe運算時也適用

也能夠自定義缺失值

a=pd.DataFrame(np.random.randint(0,20,(2,2)),

        columns=list('ab'))

b=pd.DataFrame(np.random.randint(0,10,(3,3)),

        columns=list('bca'))

fill = a.stack().mean()

a.add(b,fill_value=fill)   a的缺失值用fill填充

 

缺失值處理:

  經常使用標籤nan(not a number)

  val = np.array([1,np.nan,3,4])

  val.sum,max,min  會將nan的影響算進去

  np.nansum(val) ,nanmax,nanmin 忽略nan的影響

  

  data= pd.Series([1,np.nan,'hello',None])

  發現缺失值:

  data.isnull()   

  data[data.notnull()]     

  剔除缺失值:

  data.dropna()

  df = pd.DataFrame([[1,np.nan,2],

           [2,3,5],

           [np.nan,4,6]])

  df.dropna()    刪除含有缺失值的整行數據   ,axis=1或axis='columns' 刪除整列數據

  df[3] = np.nan

  df.dropna(axis='columns',how='all)   all表示刪除全是缺失值的那行,any表示有缺失值就刪除

  df.dropna(axis='row',thresh=3)  表示最少含有3個非缺失值的行纔會被保留

 

  填充缺失值:

  data=pd.Series([1,np.nan,2,None,3],index=list('avcde'))

  data.fillna(0)  缺失值用0填充

  data.fillna(method='ffill')  用缺失值前面的有效值填充,bfill用後面的有效值填充

  data.fillna(method='ffill',axis=1)  每行的前面有效值填充

  若是缺失值前面沒有值,那麼仍然是缺失值

相關文章
相關標籤/搜索