Pandas的學習(5.pandas中處理丟失數據和空值數據以及填充空值數據)

處理丟失數據

   有兩種丟失的數據:

       --  None

       --  np.nan(NaN)

1.None

          None是Python自帶的,其類型爲python object。因此,None不能參與到任何計算中

     object類型的運算要比int類型的運算慢得多

 2.np.nan(NaN)

           np.nan是浮點類型,能參與到計算中。但計算的結果總是NaN

        但可以使用np.nan() 函數來計算nan,此時視nan爲 3.pandas中的None與NaN  (1) pandas中None與np.nan都視作np.nan

   (1) 判斷函數:

df.isnull()
df.isnull.any()
df.isnull.all()
df.notnull()
df.notnull.any()
df.notnull.all()
'''具體的代碼實例以及功能如下:'''
from pandas import DataFrame, Series
import numpy as np

df = DataFrame({"age": [20, 21, 19, 22, 23], 'salary': [10000, 11000, 9900, 8500, 15000]},
               index=['張三', '李四', '小趙', '小王', '小馮'], columns=['age', 'salary', 'work'])
# 插入數據
df.work['李四':'小王'] = 'python'
print(df)
"""
    age  salary    work
張三   20   10000     NaN
李四   21   11000  python
小趙   19    9900  python
小王   22    8500  python
小馮   23   15000     NaN
"""

'''1.調用isnull()方法,判斷是否爲空'''
print(df.isnull())
"""
      age  salary   work
張三  False   False   True
李四  False   False  False
小趙  False   False  False
小王  False   False  False
小馮  False   False   True
"""

'''2. isnull().any() 只有數據有一個爲空,即爲True
     any(axis=0):只要數據有一個爲True就爲這“列”就爲True
     any(axis=1):只要數據有一個爲True就爲這“行”就爲True'''
s1 = df.isnull().any(axis=1)
'''(獲取數據爲空的數據)把獲得的Series在使用DataFrame取值'''
print(df[s1])
"""
    age  salary work
張三   20   10000  NaN
小馮   23   15000  NaN
"""
'''3.isnull().all() 數據全部爲空時,才爲True,axis同any()'''
print(df.isnull().all(axis=1))
"""
張三    False
李四    False
小趙    False
小王    False
小馮    False
dtype: bool
"""

'''4.notnull()  判斷數據是否不爲空'''
print(df.notnull())
"""
     age  salary   work
張三  True    True  False
李四  True    True   True
小趙  True    True   True
小王  True    True   True
小馮  True    True  False
"""
''' 5notnull().any() 只有數據有一個不爲空,即爲True
    any(axis=0):只要數據有一個不爲True就爲這“列”就爲True
    any(axis=1):只要數據有一個不爲True就爲這“行”就爲True'''
print(df.notnull().any(axis=1))
"""
張三    True
李四    True
小趙    True
小王    True
小馮    True
dtype: bool
"""

'''6.notnull().all() 數據全部不爲空時,才爲True,axis同any()'''
s2 = df.notnull().all(axis=1)
print(s2)
"""
張三    False
李四     True
小趙     True
小王     True
小馮    False
dtype: bool
"""
'''取出沒有一個空值的數據'''
print(df[s2])
"""
    age  salary    work
李四   21   11000  python
小趙   19    9900  python
小王   22    8500  python
"""

(2) 過濾函數

    ·  dropna()            可以選擇過濾的是行還是列(默認爲行)  , 也可以選擇過濾的方式  參數 :how='all'

'''dropna(),中的參數axis默認爲0,即爲行'''
'''一行數據只要有一個爲空就進行刪除,如果加上參數how='all'代表一行都爲空時才刪除'''
print(df.dropna())
"""
    age  salary    work
李四   21   11000  python
小趙   19    9900  python
小王   22    8500  python
"""
'''一列數據只要有一個爲空就進行刪除,參數how='all'代表一列都爲空時才刪除'''
print(df.dropna(axis=1))
"""
    age  salary
張三   20   10000
李四   21   11000
小趙   19    9900
小王   22    8500
小馮   23   15000
"""

(3) 填充函數 Series/DataFrame

    --   fillna()      參數value=''  即爲要填充的值

                                 method:對應的值  'bfill'(選擇後面的填充)或者'ffill(選擇前面的填充)

                                 inplace:True 是否選擇在原來的基礎上修改,加上該參數沒有返回值

'''fillna() 填充所有的空值'''
print(df.fillna(value="填充值"))
"""
    age  salary    work
張三   20   10000     填充值
李四   21   11000  python
小趙   19    9900  python
小王   22    8500  python
小馮   23   15000     填充值
"""
'''可以選擇向前填充還是向後填充
     參數method:對應的值  'bfill'(選擇後面的填充)或者'ffill(選擇前面的填充)
         inplace:True 是否選擇在原來的基礎上修改,沒有返回值
        對於DataFrame來說,選擇填充的軸axis.
               -- axis=0  index/行
               -- axis=1  columns/列'''
print(df.fillna(method='bfill'))
""" # 因爲最後一個後面沒有值,所以最後一個填充還是爲NaN
    age  salary    work
張三   20   10000  python
李四   21   11000  python
小趙   19    9900  python
小王   22    8500  python
小馮   23   15000     NaN
"""
print(df.fillna(method='ffill'))
""" # 因爲第一個的前沒有值,所以第一個填充還是NaN
    age  salary    work
張三   20   10000     NaN
李四   21   11000  python
小趙   19    9900  python
小王   22    8500  python
小馮   23   15000  python
"""

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章