處理缺失數據

處理缺失數據

pandas使用浮點值NaN(Not a Number)表示浮點和非浮點數組中的缺失數據,是一種便於被檢測出來的標記:

isnull()函數使用布爾值表示缺失值/NA:

python內置的None值也會被當做NA值處理:

NA值處理方法:

濾除缺失數據

使用dropna返回一個僅含非空數據和索引值的Series:

還可以通過布爾型索引濾除NA值:

對於DataFrame對象,dropna默認丟棄任何含有缺失值的行:

在dropna中傳入how=all只丟棄全為NA值的行:

在dropna中傳入axis=1,how=all只丟棄全為NA值的列:

使用thresh參數保留所需要的觀測數據,具體用法如下:

填充缺失數據

調用fillna函數將缺失值替換為常數值:

通過一個字典調用fillna,實現對不同的列填充不同的值,具體做法如下:

fillna默認返回新對象,也可以對現有對象進行修改:

使用插值方法填充缺失值:

如果全為NA值則插值方法不起作用。

還可以傳入Series的平均值或中位數:

fillna函數的參數如下:

源碼:

# coding: utf-8# In[1]:import numpy as npfrom pandas import Series,DataFrameimport pandas as pdstring_data = Series([Guangdong,Shandong,np.nan,Henan])print(string_data)# In[2]:# isnull()函數使用布爾值表示缺失值/NAna_string = string_data.isnull()print(na_string)# In[3]:# python內置的None值也會被當做NA值處理:string_data[0] = Nonena_string2 = string_data.isnull()print(na_string2)# In[4]:# 使用dropna返回一個僅含非空數據和索引值的Seriesfrom numpy import nan as NAdata = Series([1,NA,2.5,NA,5])dataFlo = data.dropna()print(dataFlo)# In[5]:# 使用布爾濾除NA值boolFlo = data[data.notnull()]print(boolFlo)# In[6]:# DataFrame對象的dropna用法dataFr = DataFrame([[1,3,5.5],[3,NA,NA], [NA,NA,NA],[NA,2.5,7]])print(dataFr)# In[7]:cleaned = dataFr.dropna()print(cleaned)# In[8]:# 在dropna中傳入how=all只丟棄全為NA值的行:howdata = dataFr.dropna(how=all) print(howdata)# In[9]:dataFr[4] = NAprint(dataFr)# In[10]:# 丟棄全為NA值的列data_col = dataFr.dropna(axis=1,how=all)print(data_col)# In[11]:# 創建一個7行3列呈正態分布的DataFrame對象from numpy.random import randndf = DataFrame(np.random.randn(7,3))print(df)# In[12]:df.ix[:4,1] = NAprint(df)# In[13]:df.ix[:2,2] = NAprint(df)# In[14]:df1 = df.dropna(thresh=1)print(df1)# In[15]:df2 = df.dropna(thresh=2)print(df2)# In[16]:df3 = df.dropna(thresh=3)print(df3)# In[17]:print(df)# In[18]:# 調用fillna函數將缺失值替換為常數值fil = df.fillna(0)print(fil)# In[19]:# 通過字典調用fillnafilDic = df.fillna({1:0.5, 3:-1})print(filDic)# In[20]:# 總是返回被填充對象的引用_ = df.fillna(9999,inplace=True)print(df)# In[21]:datafillna = DataFrame(np.random.randn(7,4))datafillna.ix[4:,1] = NA; datafillna.ix[2:,2] = NA;datafillna.ix[:,3] = NAprint(datafillna)# In[22]:# 使用插值方法填充缺失值dfAr = datafillna.fillna(method=ffill)print(dfAr)# In[23]:# 只填充2行dfAr2 = datafillna.fillna(method=ffill,limit=2)print(dfAr2)# In[24]:daSe = Series([1,NA,5.2,NA,7])mean_daSe = daSe.fillna(daSe.mean())print(mean_daSe)

推薦閱讀:

中國目前數據分析數據挖掘市場情形是怎樣的,機會多嗎?前景如何?
大數據理論如何指導交通數據分析?
互聯網運營之如何進行一次全面的網站分析
第十一章:中級繪圖
信息圖表高仿——R語言仿一財經典線條比較圖

TAG:Python | 数据分析 |