zoukankan      html  css  js  c++  java
  • 第5章:pandas入门【4】处理缺失数据

    一、缺失数据NaN

    1 from pandas import Series,DataFrame
    2 import numpy as np
    3 import pandas as pd
    4 string_data = Series(['musickness','choke',np.nan,'love'])
    string_data
    Out[3]:
    0    musickness
    1         choke
    2           NaN
    3          love
    dtype: object
    #Series自带isnull方法
    string_data.isnull()
    
    Out[5]:
    0    False
    1    False
    2     True
    3    False
    dtype: bool
    #None也会被当做NA处理
    string_data[0] = None
    string_data.isnull()
    
    Out[6]:
    0     True
    1    False
    2     True
    3    False
    dtype: bool

    二、滤除缺失数据:dropna

    #滤除缺失数据
    from numpy import nan as NA
    data = Series([1,NA,3.5,NA,7])
    data.dropna()
    
    Out[8]:
    0    1.0
    2    3.5
    4    7.0
    dtype: float64

    方式二:

    data.notnull()
    
    Out[9]:
    0     True
    1    False
    2     True
    3    False
    4     True
    dtype: bool
    
    data[data.notnull()]
    
    Out[10]:
    0    1.0
    2    3.5
    4    7.0
    dtype: float64

    DataFrame情况:

    data = DataFrame([[1.,6.5,3.],[1,NA,NA],
                     [NA,NA,NA],[NA,6.5,3.]])
    #dropna()默认丢弃任何含有缺失值的行
    cleaned = data.dropna()
    cleaned

    #传入how='all'将只丢弃全为NA的行
    data.dropna(how='all')

    data[4] = NA
    data

    #丢弃列:加axis=1
    data.dropna(axis=1,how='all')    

    df = DataFrame(np.random.randn(7,3))
    df.iloc[:4,1] = NA
    df.iloc[:2,2] = NA
    df

    #参数thresh留下部分观测数据
    df.dropna(thresh=3)

    参数thresh(n):如果该行的值(非NA的)大于等于n,就保留下来。
    三、填充缺失数据:fillna
    df.fillna(0)

    #通过一个字典调用fillna,实现对不同的列填充不同的值
    df.fillna({1:0.5,2:-1})

    #inplace:修改调用者对象而不产生副本
    _ = df.fillna(0,inplace=True)
    df

      inplace参数:
      修改一个对象时:
                   inplace=True:不创建新的对象,直接对原始对象进行修改;
                   inplace=False:对数据进行修改,创建并返回新的对象承载其修改结果。

    from pandas import Series,DataFrame
    data = DataFrame({'state':['Ohio','Nevada'],
                      'year':[2019,2020],
                      'pop':[1.5,2.9]})
    data

    false_data = data.drop(['year'],axis=1,inplace=False)
    false_data

    data
    true_data = data.drop(['year'],axis=1,inplace=True)
    print(true_data)
    print(data)
    None
        state  pop
    0    Ohio  1.5
    1  Nevada  2.9

     method:

    df = DataFrame(np.random.randn(6,3))
    df.iloc[2:,1] = NA;
    df.iloc[4:,2] = NA;
    df

    df.fillna(method='ffill')
    #limit:可以连续填充的最大数量
    df.fillna(method='ffill',limit=2)

    #填充平均值
    data = Series([1.,NA,3.5,NA,7])
    data.fillna(data.mean())
    0    1.000000
    1    3.833333
    2    3.500000
    3    3.833333
    4    7.000000
    dtype: float64
    
    
  • 相关阅读:
    angular项目中,使用ant(蚂蚁金服)生成table表格
    angular2 单元测试
    angular2 单元测试
    angular2单元测试
    angular2单元测试
    angular2单元测试
    angular2单元测试
    浅谈Unicode和char的关系(Java)
    剖析面试最常见问题之 Java 基础知识
    ssm系列框架
  • 原文地址:https://www.cnblogs.com/direwolf22/p/12028914.html
Copyright © 2011-2022 走看看