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) 每行的前面有效值填充
若是缺失值前面沒有值,那麼仍然是缺失值