欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Pandas缺失值inf與nan的處理實踐

 更新時間:2023年06月21日 15:23:26   作者:肖永威  
這篇文章主要介紹了關(guān)于Pandas缺失值inf與nan的處理實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1. Pandas缺失值

對于表格數(shù)據(jù)而言,缺失值分為三種:

  • 一是Pandas中的空值(NaN)
  • 二是Pandas中的正負無窮(inf),嚴格意義上也不算缺失值,表示無窮!
  • 三是自定義的缺失值。

1.1. Pandas中的空值

Pandas中的空值有三個:np.nan (Not a Number) 、 None 和 pd.NaT(時間格式的空值,注意大小寫不能錯),這三個值可以用Pandas中的函數(shù)isnull(),notnull(),isna()進行判斷。

isnull()和notnull()的結(jié)果互為取反,isnull()和isna()的結(jié)果一樣。

需要特別注意三點:

1.如果某一列數(shù)據(jù)全是空值且包含pd.NaT,np.nan和None會自動轉(zhuǎn)換成pd.NaT。

2.空值(np.nan、None、pd.NaT)既不是空字符串"“,也不是空格” "。

3.None是 一個 Python 對象

  • 不可以用在任意的 NumPy 或 Pandas 數(shù)組里,只用于列表且數(shù)據(jù)類型是 Object。
  • 默認 Pandas 會將 None 轉(zhuǎn)換成 NAN
  • 對包含 None 元素的數(shù)組進行計算(如: sum, min, max)會拋出 TypeError 異常。
import pandas as pd
import numpy as np
df = pd.DataFrame({'float': [1.3,5.2,np.nan],
                   'int': [1,8,None],
                   'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,pd.NaT],
                   'string': ['python','pandas','numpy']})

例如通過df.isnull()查看缺失情況。

1.2. Pandas中的正負無窮

對于特別大的數(shù)字,或者除數(shù)為0時,將產(chǎn)生正負無窮,Pandas中用np.inf表示。

import pandas as pd
import numpy as np
df = pd.DataFrame({'float': [1.3,5.2,np.nan],
                   'int': [1,8,None],
                   'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,pd.NaT],
                   'string': ['python','pandas','numpy']})
df['inf'] = df['float']/0

1.3. 自定義缺失值

自定義缺失值有很多不同的形式,如上面剛說的空字符串和空格(當然,一般不用這兩個,因為看起來不夠直觀)。

在獲取數(shù)據(jù)時,可能會有一些數(shù)據(jù)無法得到,也可能數(shù)據(jù)本身就沒有,造成了缺失值。

對于這些缺失值,在獲取數(shù)據(jù)時通常會用一些符號之類的數(shù)據(jù)來代替,如問號?,斜杠/,字母NA等。

2. 處理缺失數(shù)據(jù)

2.1. 用數(shù)組過濾

  • 用 df.isin([np.nan, np.inf, -np.inf]) 方法
  • 用 df.any() 方法只要包含任意一個缺失的值,any()一個序列中滿足一個True,則返回True
  • 最后,用 布爾數(shù)組來進行切分。
import pandas as pd
import numpy as np
df = pd.DataFrame({'float': [1.3,5.2,np.nan],
                   'int': [1,8,None],
                   'datetime': [pd.Timestamp('2018-03-10'),
                            pd.Timestamp('2019-05-10'),pd.NaT],
                   'string': ['python','pandas','numpy']})
df[~df.isin([np.nan, np.inf, -np.inf]).any(axis=1)]

2.2. 替換 inf 和 -inf 成 NaN, 然后選擇非空的行數(shù)據(jù)

  • 用df.replace([np.inf, -np.inf], np.nan),把正負無窮為空值np.nan
  • 再用df.notnull(),篩選非空數(shù)據(jù)
  • 再用df.all(),all()一個序列中所有值為True時,返回True,否則為False。
import pandas as pd
import numpy as np
df = pd.DataFrame({'float': [1.3,5.2,np.inf],
                   'int': [1,8,None],
                   'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,
                                pd.Timestamp('2019-05-10')],
                   'string': ['python','pandas','numpy']})
df
df['inf'] = df['float']/0
df
df['inf'].replace(np.inf, 0, inplace=True)
df
df[df.replace([np.inf, -np.inf], np.nan).notnull().all(axis=1)]
#df[df.notnull().all(axis=1)]

2.3. 替換 inf 和 -inf 成 NaN,再用dropna() 方法刪除為空的數(shù)據(jù)

pandas中的dataframe對象,刪除缺失值的方式:

  • df.dropna(how=‘all’) #刪除所有內(nèi)容均為缺失值的行
  • df.dropna(axis=1) #丟棄有缺失值的列
  • df.dropna(axis=1, how = ‘all’) #丟棄所有列中所有值均缺失的列
import pandas as pd
import numpy as np
df = pd.DataFrame({'float': [1.3,5.2,np.inf],
                   'int': [1,8,None],
                   'datetime': [pd.Timestamp('2018-03-10'),pd.NaT,
                                pd.Timestamp('2019-05-10')],
                   'string': ['python','pandas','numpy']})
df['inf'] = df['float']/0
df
df.dropna(axis=1).head(3)
df.replace([np.inf, -np.inf], np.nan).dropna(axis=1).head(3)

或者:

將某1列(series格式)中的 inf 替換為數(shù)值

import numpy as np
df['Col'][np.isinf(df['Col'])] = -1

將某1列(series格式)中的 inf 替換為NA值

import numpy as np
df['Col'][np.isinf(df['Col'])] = np.nan

2.4. 用df.fillna(value=values) 將缺失的數(shù)據(jù)進行填充

填充缺失值:

fillna(method=‘ffill'/‘bfill', # ffill向前填充;bfill向后填充。
axis=0/1 # 按行/列進行填充
)

例如:

data.fillna(0, inplace=True) # 填充0
data.fillna(method=‘ffill') # 按列,向前進行填充
data.fillna(method=‘bfill',axis=1) # 按照行,向后進行填充
data.fillna(data.mean()) # 填充平均值
import pandas as pd
import numpy as np
df = pd.DataFrame({'A':[1,np.nan],
                   'B':[21,3],
                   'C':[4,5]})
#制造inf
df['D'] = df['C']/0
print(df)
#替換正inf為NaN
df.replace(np.inf, np.nan, inplace=True)
df['E'] = -df['B']/0
print(df)
#替換正、負inf為0
df.replace([np.inf, -np.inf], 0, inplace=True)
#單列替換NaN為10
df['A'].fillna(10, inplace=True)
#替換NaN為0
df.replace(np.nan, 0, inplace=True)
print(df)

3. Pandas處理缺失值函數(shù)小結(jié)

1.isnullnotnull: 檢測是否是空值,可用于dataframe和Series

2.dropna: 丟棄,刪除缺失值

  • axis: 刪除行還是列,{0 ro ‘index’, 1 or ‘columns’}, default 0
  • how: 如果等于any則任何值為空都刪除,如果等于all則所有值都為空時才刪除
  • inplace: 如果為True則修改當前dataframe, 否則返回新的dataframe

3.fillna: 填充空值

  • value: 用于填充的值,可以是單個值,或者字典(key是列名,value是值)
  • method: 等于ffill使用前一個部位空的值填充forword fill; 等于bfill使用后一個部位空的值天充backword fill
  • axis: 按行還是按列填充,{0 ro ‘index’, 1 or ‘columns’}
  • inplace: 如果為True則修改當前dataframe, 否則返回新的dataframe

4.replace: 替換,replace(to_replace, value) 前面是需要替換的值,后面是替換后的值。

  • inplace: 如果為True則修改當前dataframe, 否則返回新的dataframe

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python的動態(tài)重新封裝的教程

    Python的動態(tài)重新封裝的教程

    這篇文章主要介紹了Python的動態(tài)重新封裝的教程,本文來自于IBM的官方開發(fā)者文檔,需要的朋友可以參考下
    2015-04-04
  • 用python給自己做一款小說閱讀器過程詳解

    用python給自己做一款小說閱讀器過程詳解

    這篇文章主要介紹了用python給自己做一款小說閱讀器過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 深入淺析Django MTV模式

    深入淺析Django MTV模式

    Django是基于MTV模式的框架,需要配合url控制器(路徑分發(fā))使用,本文重點給大家介紹Django MTV模式詳解,需要的朋友參考下吧
    2021-09-09
  • Python實現(xiàn)訪問者模式詳情

    Python實現(xiàn)訪問者模式詳情

    這篇文章主要介紹了Python實現(xiàn)訪問者模式詳情,訪問者模式,指作用于一個對象結(jié)構(gòu)體上的元素的操作。訪問者可以使用戶在不改變該結(jié)構(gòu)體中的類的基礎(chǔ)上定義一個新的操作,下文更多相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 用Python爬取某乎手機APP數(shù)據(jù)

    用Python爬取某乎手機APP數(shù)據(jù)

    最近爬取的數(shù)據(jù)都是網(wǎng)頁端,今天來教大家如何爬取手機端app數(shù)據(jù)(本文以ios蘋果手機為例,其實安卓跟ios差不多)! 本文將以『某乎』為實戰(zhàn)案例,手把手教你從配置到代碼一步一步的爬取App數(shù)據(jù),需要的朋友可以參考下
    2021-06-06
  • python實現(xiàn)全排列代碼(回溯、深度優(yōu)先搜索)

    python實現(xiàn)全排列代碼(回溯、深度優(yōu)先搜索)

    今天小編就為大家分享一篇python實現(xiàn)全排列代碼(回溯、深度優(yōu)先搜索),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實現(xiàn)簡單多人聊天室

    python實現(xiàn)簡單多人聊天室

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單多人聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • IronPython連接MySQL的方法步驟

    IronPython連接MySQL的方法步驟

    這篇文章主要介紹了IronPython連接MySQL的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python實現(xiàn)文件名批量替換和內(nèi)容替換

    python實現(xiàn)文件名批量替換和內(nèi)容替換

    這篇文章主要介紹了python實現(xiàn)文件名批量替換和內(nèi)容替換,第一個例子可以指定文件類型,需要的朋友可以參考下
    2014-03-03
  • NumPy中np.c_ 和 np.r_ 的區(qū)別小結(jié)

    NumPy中np.c_ 和 np.r_ 的區(qū)別小結(jié)

    np.c_和?np.r_是NumPy庫中兩個非常有用的函數(shù),它們分別用于按列和按行拼接數(shù)組本文主要介紹了NumPy中np.c_ 和 np.r_ 的區(qū)別小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論