一篇文章告诉你用pandas处理缺失值

pandas对象中表现缺失值的方式并不完美,但是它对大部分用户来说是有用的。对于数值型数据,pandas使用浮点值NaN(Not a Number来表示缺失值)。我们称NaN为容易检测到的标识值:

In : 


  1. string_data = pd.Series(['aardvark', 'artichoke', np.nan, 'avocado']) 

  1. string_data 

Out:


  1. 0      aardvark  
  2. 1     artichoke  
  3. 2            NaN  
  4. 3       avocado  
  5. dtype: object 

In:


  1. string_data.isnull() 

Out:


  1. 0     False  
  2. 1     False  
  3. 2      True  
  4. 3     False  
  5. dtype: bool 

在pandas中,我们采用了R语言中的编程惯例,将缺失值成为NA,意思是not available(不可用)。在统计学应用中,NA数据可以是不存在的数据或者是存在但不可观察的数据(例如在数据收集过程中出现了问题)。当清洗数据用于分析时,对缺失数据本身进行分析以确定数据收集问题或数据丢失导致的数据偏差通常很重要。

Python内建的None值在对象数组中也被当作NA处理:

In:


  1. string_data[0] = None 

  1. string_data.isnull() 

Out:


  1. 0      True  
  2. 1     False  
  3. 2      True  
  4. 3     False  
  5. dtype: bool 

pandas项目持续改善处理缺失值的内部细节,但是用户API函数,比如pandas. isnull,抽象掉了很多令人厌烦的细节。处理缺失值的相关函数列表如下:

  •  dropna:根据每个标签的值是否是缺失数据来筛选轴标签,并根据允许丢失的数据量来确定阈值
  •  fillna:用某些值填充缺失的数据或使用插值方法(如“ffill”或“bfill”)。
  •  isnull:返回表明哪些值是缺失值的布尔值
  •  notnull:isnull的反作用函数

01 过滤缺失值

有多种过滤缺失值的方法。虽然你可以使用pandas.isnull和布尔值索引手动地过滤缺失值,但dropna在过滤缺失值时是非常有用的。在Series上使用dropna,它会返回Series中所有的非空数据及其索引值:

In:


  1. from numpy import nan as NA 

  1. data = pd.Series([1, NA, 3.5, NA, 7]) 

  1. data.dropna() 

Out:


  1. 0     1.0  
  2. 2     3.5  
  3. 4     7.0  
  4. dtype: float64 

上面的例子与下面的代码是等价的:

In:


  1. data[data.notnull()] 

Out:


  1. 0     1.0  
  2. 2     3.5  
  3. 4     7.0  
  4. dtype: float64 

当处理DataFrame对象时,事情会稍微更复杂一点。你可能想要删除全部为NA或包含有NA的行或列。dropna默认情况下会删除包含缺失值的行:

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章