美文网首页呆鸟的Python数据分析PythonPandas
Python数据处理从零开始----第三章(pandas)②处理

Python数据处理从零开始----第三章(pandas)②处理

作者: 柳叶刀与小鼠标 | 来源:发表于2018-11-21 14:36 被阅读136次

    目录

    第三章(pandas)

    Python数据处理从零开始----第三章(pandas)①删除列
    Python数据处理从零开始----第三章(pandas)②处理缺失数据

    第四章(可视化)

    Python数据处理从零开始----第四章(可视化)⑧火山图

    ===============================================
    在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

    缺失值的判断

    pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。

     s = Series(["a","b",np.nan,"c",None])
     print(s)
        '''
        0       a
        1       b
        2     NaN
        3       c
        4    None
        '''
        #判断缺失值,如果是则返回True,否则返回False
        print(s.isnull())
        '''
        0    False
        1    False
        2     True
        3    False
        4     True
        '''
        #输出缺失值的索引和值
        print(s[s.isnull()])
        '''
        2     NaN
        4    None
        '''
    

    pandas在运算中会自动忽略缺失值。

    a  = pd.Series([1,2,np.nan,3,None])
    a.sum()
    6
    

    此外pandas一共提供了4个针对缺失数据进行操作的函数,分别是isnull(),notnull(),dropna(),fillna()。

    a.isnull()
    Out[9]: 
    0    False
    1    False
    2     True
    3    False
    4     True
    dtype: bool
    
    a.notnull()
    Out[10]: 
    0     True
    1     True
    2    False
    3     True
    4    False
    dtype: bool
    
    a.dropna()
    Out[11]: 
    0    1.0
    1    2.0
    3    3.0
    dtype: float64
    

    DataFrame的缺失值过滤

    DataFrame删除缺失值相对于Series而言就要复杂一些,也许有的时候你是想删除含有缺失值的行或列,也许有时候你需要删除的是,当整行或整列全为缺失值的时候才删除,好在pandas对于这两种情况都有相对应的处理方法。

    1、删除含有缺失值的行和列

    df.dropna(
    axis=0, # 0: 对行进行操作; 1: 对列进行操作
    how='any' # 'any': 只要存在 NaN 就 drop 掉; 'all': 必须全部是 NaN 才 drop
    )

    a = [[1, np.nan, 2],[9,None,np.nan],[3, 4, None],[5,6,7]]
    data = pd.DataFrame(a)
    data
    
    
    Out[19]: 
       0    1    2
    0  1  NaN  2.0
    1  9  NaN  NaN
    2  3  4.0  NaN
    3  5  6.0  7.0
    
    
    
    
    
    data.dropna()
    Out[20]: 
       0    1    2
    3  5  6.0  7.0
    
    data.dropna(axis=1)
    Out[21]: 
       0
    0  1
    1  9
    2  3
    3  5
    

    2、删除全为缺失值的行和列

    a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
    data = pd.DataFrame(a)
    print(data)
    
    
         0   1    2
    0  1.0 NaN  2.0
    1  NaN NaN  NaN
    2  3.0 NaN  NaN
    3  5.0 NaN  7.0
    
    print(data.dropna(how="all"))
         0   1    2
    0  1.0 NaN  2.0
    2  3.0 NaN  NaN
    3  5.0 NaN  7.0
    
    
    
    print(data.dropna(how="all",axis=1))
         0    2
    0  1.0  2.0
    1  NaN  NaN
    2  3.0  NaN
    3  5.0  7.0
    

    3.使用thresh控制删除的行数

    a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
    data = pd.DataFrame(a)
    data
    Out[35]: 
         0   1    2
    0  1.0 NaN  2.0
    1  NaN NaN  NaN
    2  3.0 NaN  NaN
    3  5.0 NaN  7.0
    
    data.dropna(how="all",thresh=3)
    Out[36]: 
    Empty DataFrame
    Columns: [0, 1, 2]
    Index: []
    
    data.dropna(how="all",thresh=1)
    Out[37]: 
         0   1    2
    0  1.0 NaN  2.0
    2  3.0 NaN  NaN
    3  5.0 NaN  7.0
    

    df.fillna(value=0)

    填充缺失值

    数据都是宝贵的,也许有时候你的数据不够多,因为数据越多对于模型的训练,数据分析都是有好处的,所以很多的时候我们都不想删除数据。通常情况下,也许你会选择用一些特殊值来填充缺失值。下面介绍使用pandas的fillna方法来填充缺失数据。

    1、指定特殊值填充缺失值

    a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
        data = DataFrame(a)
        print(data)
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  NaN  6.0
        2  3  7.0  NaN
        3  5  NaN  7.0
        '''
        #用0填充所有的缺失数据
        print(data.fillna(0))
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  0.0  6.0
        2  3  7.0  0.0
        3  5  0.0  7.0
        '''
    

    2、不同列使用不同的填充值

     a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
        data = DataFrame(a)
        print(data)
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  NaN  6.0
        2  3  7.0  NaN
        3  5  NaN  7.0
        '''
        print(data.fillna({1:1,2:2}))
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  1.0  6.0
        2  3  7.0  2.0
        3  5  1.0  7.0
        '''
    

    3、前向填充和后向填充

     a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
        data = DataFrame(a)
        print(data)
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  NaN  6.0
        2  3  7.0  NaN
        3  5  NaN  7.0
        '''
        #前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充
        print(data.fillna(method="ffill"))
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  2.0  6.0
        2  3  7.0  6.0
        3  5  7.0  7.0
        '''
        #后向填充,使用下一行的值,不存在的时候就不填充
        print(data.fillna(method="bfill"))
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  7.0  6.0
        2  3  7.0  7.0
        3  5  NaN  7.0
        '''
    

    4、使用列的平均值进行填充

     a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
     data = DataFrame(a)
     print(data)
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  NaN  6.0
        2  3  7.0  NaN
        3  5  NaN  7.0
        '''
    print(data.fillna(data.mean()))
        '''
           0    1    2
        0  1  2.0  2.0
        1  3  4.5  6.0
        2  3  7.0  5.0
        3  5  4.5  7.0
        '''
    

    相关文章

      网友评论

        本文标题:Python数据处理从零开始----第三章(pandas)②处理

        本文链接:https://www.haomeiwen.com/subject/zkfcqqtx.html