最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?Pandas中缺失值NaN的判斷,刪除及替換

 更新時(shí)間:2022年01月06日 15:51:07   作者:酒釀小圓子~  
缺失值是指數(shù)據(jù)集中的某些觀察存在遺漏的指標(biāo)值,缺失值的存在同樣會(huì)影響到數(shù)據(jù)剖析和挖掘的效果,下面這篇文章主要給大家介紹了關(guān)于Python?Pandas中缺失值NaN的判斷,刪除及替換的相關(guān)資料,需要的朋友可以參考下

前言

當(dāng)使用pandas讀取csv文件時(shí),如果元素為空,則將其視為缺失值NaN(Not a Number, 非數(shù)字)。

使用dropna()方法刪除缺失值,使用fillna()方法用其他值替換(填充)缺失值。

如果要提取包含缺失值的行或列,使用isnull()方法確定元素是否缺失。

1. 檢查缺失值NaN

例如,讀取并使用包含帶read_csv的空格的csv文件。

import pandas as pd
import numpy as np
import math

df = pd.read_csv('./data/05/sample_pandas_normal_nan.csv')
print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

使用pandas.isnull() 檢查所有缺失的值:

print(df.isnull())
# 或者 
print(pd.isnull(df))
#     name    age  state  point  other
# 0  False  False  False   True   True
# 1   True   True   True   True   True
# 2  False   True  False   True   True
# 3  False  False  False  False   True
# 4  False   True  False  False   True
# 5  False  False   True   True   True

檢查 ‘name’ 列缺失的值:

print(df['name'].isnull())
# 0    False
# 1     True
# 2    False
# 3    False
# 4    False
# 5    False
Name: name, dtype: bool

也可以使用numpy.isnan() 和math.isnan() (但是需要分別導(dǎo)入NumPy和math):

print(pd.isnull(df.at[0, 'point']))
print(np.isnan(df.at[0, 'point']))
print(math.isnan(df.at[0, 'point']))
# True
# True
# True

2. Pandas中NaN的類型

在Pandas中,將None,np.nan,math.nan和pd.np.nan視為缺失值NaN

s_nan = pd.Series([None, np.nan, math.nan, pd.np.nan])
print(s_nan)
# 0   NaN
# 1   NaN
# 2   NaN
# 3   NaN
# dtype: float64

print(s_nan[0])
print(type(s_nan[0]))
# nan
# <class 'numpy.float64'>

print(s_nan.isnull())
# 0    True
# 1    True
# 2    True
# 3    True
# dtype: bool

3. NaN的刪除 dropna()

使用dropna()方法刪除缺失值。

默認(rèn)情況下,將返回新對(duì)象,并且不會(huì)更改原始對(duì)象,但是參數(shù)inplace = True會(huì)更改原始對(duì)象本身。

print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

3.1 刪除所有值均缺失的行/列

如果指定了參數(shù)how =‘all’,則將刪除所有缺少值的行。

print(df.dropna(how='all'))
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

如果設(shè)置axis = 1,則將刪除所有缺少值的列。

print(df.dropna(how='all', axis=1))
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 1      NaN   NaN   NaN    NaN
# 2  Charlie   NaN    CA    NaN
# 3     Dave  68.0    TX   70.0
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

刪除所有缺少值的行和列的數(shù)據(jù):

df2 = df.dropna(how='all').dropna(how='all', axis=1)
print(df2)
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 2  Charlie   NaN    CA    NaN
# 3     Dave  68.0    TX   70.0
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

3.2 刪除至少包含一個(gè)缺失值的行/列

基于上面刪除所有缺少值的行和列的數(shù)據(jù)df2 :

print(df2)
#       name   age state  point
# 0    Alice  24.0    NY    NaN
# 2  Charlie   NaN    CA    NaN
# 3     Dave  68.0    TX   70.0
# 4    Ellen   NaN    CA   88.0
# 5    Frank  30.0   NaN    NaN

如果指定了參數(shù)how =‘any’,則將刪除至少包含一個(gè)缺失值的行。默認(rèn)值為how =‘any’。

print(df2.dropna(how='any'))
#    name   age state  point
# 3  Dave  68.0    TX   70.0

print(df2.dropna())
#    name   age state  point
# 3  Dave  68.0    TX   70.0

如果設(shè)置axis = 1,則將刪除包含至少一個(gè)缺失值的列將被刪除。

print(df2.dropna(how='any', axis=1))
#       name
# 0    Alice
# 2  Charlie
# 3     Dave
# 4    Ellen
# 5    Frank

3.3 根據(jù)不缺少值的元素?cái)?shù)量刪除行/列

通過在參數(shù)thresh中指定數(shù)字,可以根據(jù)不缺少值的元素?cái)?shù)量刪除行和列。

例如,如果thresh = 3,則保留包含三個(gè)或更多個(gè)不丟失值的元素的行,并刪除其他行(包含兩個(gè)或更多個(gè)不丟失值的元素的行)。

print(df.dropna(thresh=3))
#     name   age state  point  other
# 0  Alice  24.0    NY    NaN    NaN
# 3   Dave  68.0    TX   70.0    NaN
# 4  Ellen   NaN    CA   88.0    NaN

如果axis= 1,則應(yīng)用于列。

print(df.dropna(thresh=3, axis=1))
#       name   age state
# 0    Alice  24.0    NY
# 1      NaN   NaN   NaN
# 2  Charlie   NaN    CA
# 3     Dave  68.0    TX
# 4    Ellen   NaN    CA
# 5    Frank  30.0   NaN

3.4 刪除特定行/列中缺少值的列/行

如果要基于特定的行/列刪除,請(qǐng)?jiān)诹斜淼膮?shù)子集中指定要定位的行/列標(biāo)簽。由于它必須是列表,因此請(qǐng)至少指定一個(gè)目標(biāo),例如subset = [‘name’]。 默認(rèn)情況下,子集指定的列中缺少值的行將被刪除。

print(df.dropna(subset=['age']))
#     name   age state  point  other
# 0  Alice  24.0    NY    NaN    NaN
# 3   Dave  68.0    TX   70.0    NaN
# 5  Frank  30.0   NaN    NaN    NaN

如果指定了多列,則默認(rèn)為刪除所有缺少指定值的行。

print(df.dropna(subset=['age', 'state']))
#     name   age state  point  other
# 0  Alice  24.0    NY    NaN    NaN
# 3   Dave  68.0    TX   70.0    NaN

如果參數(shù)how =‘all’,則僅刪除所有指定列均缺少值的行。

print(df.dropna(subset=['age', 'state'], how='all'))
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

4. 缺失值NaN的替換(填充) fillna()

可以使用fillna()方法將缺失值替換為任意值。

默認(rèn)情況下,將返回新對(duì)象,并且不會(huì)更改原始對(duì)象,但是參數(shù)inplace = True會(huì)更改原始對(duì)象本身。

print(df)
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1      NaN   NaN   NaN    NaN    NaN
# 2  Charlie   NaN    CA    NaN    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen   NaN    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

4.1 用通用值統(tǒng)一替換

如果指定要用參數(shù)替換的值,則所有缺少的值NaN都將替換為該值。

print(df.fillna(0))
#       name   age state  point  other
# 0    Alice  24.0    NY    0.0    0.0
# 1        0   0.0     0    0.0    0.0
# 2  Charlie   0.0    CA    0.0    0.0
# 3     Dave  68.0    TX   70.0    0.0
# 4    Ellen   0.0    CA   88.0    0.0
# 5    Frank  30.0     0    0.0    0.0

4.2 為每列替換不同的值

將字典指定為參數(shù)時(shí),每列將替換一個(gè)不同的值。字典鍵是列標(biāo)簽(列名),而值是要替換的值。未指定的列仍缺少值NaN。

print(df.fillna({'name': 'XXX', 'age': 20, 'point': 0}))
#       name   age state  point  other
# 0    Alice  24.0    NY    0.0    NaN
# 1      XXX  20.0   NaN    0.0    NaN
# 2  Charlie  20.0    CA    0.0    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen  20.0    CA   88.0    NaN
# 5    Frank  30.0   NaN    0.0    NaN

不僅可以指定字典,還可以指定pandas.Series。具有與pandas.Series中的標(biāo)簽匹配的列標(biāo)簽(列名)的列中缺少的值將替換為pandas.Series值。與pandas.Series標(biāo)簽不對(duì)應(yīng)的列仍然缺少值。

s_for_fill = pd.Series(['ZZZ', 100], index=['name', 'age'])
print(s_for_fill)
# name    ZZZ
# age     100
# dtype: object

print(df.fillna(s_for_fill))
#       name    age state  point  other
# 0    Alice   24.0    NY    NaN    NaN
# 1      ZZZ  100.0   NaN    NaN    NaN
# 2  Charlie  100.0    CA    NaN    NaN
# 3     Dave   68.0    TX   70.0    NaN
# 4    Ellen  100.0    CA   88.0    NaN
# 5    Frank   30.0   NaN    NaN    NaN

4.3 用每列的平均值,中位數(shù),眾數(shù)等替換

可以使用mean()方法計(jì)算每列的平均值。結(jié)果是pandas.Series。缺失值將被排除并計(jì)算。

print(df.mean())
# age      40.666667
# point    79.000000
# other          NaN
# dtype: float64

如果將此pandas.Series指定為fillna()的參數(shù),則如上所述,將相應(yīng)列中的缺失值替換為平均值。

print(df.fillna(df.mean()))
#       name        age state  point  other
# 0    Alice  24.000000    NY   79.0    NaN
# 1      NaN  40.666667   NaN   79.0    NaN
# 2  Charlie  40.666667    CA   79.0    NaN
# 3     Dave  68.000000    TX   70.0    NaN
# 4    Ellen  40.666667    CA   88.0    NaN
# 5    Frank  30.000000   NaN   79.0    NaN

同樣,如果要替換中位數(shù),請(qǐng)使用中位數(shù)()方法。在偶數(shù)的情況下,兩個(gè)中心值的平均值是中值。

print(df.fillna(df.median()))
#       name   age state  point  other
# 0    Alice  24.0    NY   79.0    NaN
# 1      NaN  30.0   NaN   79.0    NaN
# 2  Charlie  30.0    CA   79.0    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen  30.0    CA   88.0    NaN
# 5    Frank  30.0   NaN   79.0    NaN

4.4 替換為上一個(gè)或下一個(gè)值

通過使用method參數(shù),可以替換之前和之后的值,而不是指定的值。 如果method =‘ffill’,它將被以前的值替換;如果method =‘bfill’,將被后面的值替換。對(duì)于時(shí)間序列數(shù)據(jù)很有用。

print(df.fillna(method='ffill'))
# ? ? ? name ? age state ?point ?other
# 0 ? ?Alice ?24.0 ? ?NY ? ?NaN ? ?NaN
# 1 ? ?Alice ?24.0 ? ?NY ? ?NaN ? ?NaN
# 2 ?Charlie ?24.0 ? ?CA ? ?NaN ? ?NaN
# 3 ? ? Dave ?68.0 ? ?TX ? 70.0 ? ?NaN
# 4 ? ?Ellen ?68.0 ? ?CA ? 88.0 ? ?NaN
# 5 ? ?Frank ?30.0 ? ?CA ? 88.0 ? ?NaN

print(df.fillna(method='bfill'))
# ? ? ? name ? age state ?point ?other
# 0 ? ?Alice ?24.0 ? ?NY ? 70.0 ? ?NaN
# 1 ?Charlie ?68.0 ? ?CA ? 70.0 ? ?NaN
# 2 ?Charlie ?68.0 ? ?CA ? 70.0 ? ?NaN
# 3 ? ? Dave ?68.0 ? ?TX ? 70.0 ? ?NaN
# 4 ? ?Ellen ?30.0 ? ?CA ? 88.0 ? ?NaN
# 5 ? ?Frank ?30.0 ? NaN ? ?NaN ? ?NaN

使用參數(shù)limit,可以指定連續(xù)替換的最大數(shù)量。

print(df.fillna(method='bfill', limit=1))
#       name   age state  point  other
# 0    Alice  24.0    NY    NaN    NaN
# 1  Charlie   NaN    CA    NaN    NaN
# 2  Charlie  68.0    CA   70.0    NaN
# 3     Dave  68.0    TX   70.0    NaN
# 4    Ellen  30.0    CA   88.0    NaN
# 5    Frank  30.0   NaN    NaN    NaN

參考博客:

Pandas刪除,替換并提取其中的缺失值NaN(dropna,fillna,isnull): http://m.fzitv.net/article/233846.htm

總結(jié)

到此這篇關(guān)于Python Pandas中缺失值NaN的判斷,刪除及替換的文章就介紹到這了,更多相關(guān)Pandas缺失值NaN判斷刪除及替換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)在PDF中插入單圖像水印和平鋪圖像水印

    Python實(shí)現(xiàn)在PDF中插入單圖像水印和平鋪圖像水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)在PDF中插入單圖像水印和平鋪圖像水印,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Python人工智能語音合成實(shí)現(xiàn)案例詳解

    Python人工智能語音合成實(shí)現(xiàn)案例詳解

    這篇文章主要為大家介紹了Python人工智能語音合成實(shí)現(xiàn)案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Python爬蟲lxml庫處理XML和HTML文檔

    Python爬蟲lxml庫處理XML和HTML文檔

    在當(dāng)今信息爆炸的時(shí)代,網(wǎng)絡(luò)上的數(shù)據(jù)量龐大而繁雜,為了高效地從網(wǎng)頁中提取信息,Python爬蟲工程師們需要強(qiáng)大而靈活的工具,其中,lxml庫憑借其卓越的性能和豐富的功能成為Python爬蟲領(lǐng)域的不可或缺的工具之一,本文將深入介紹lxml庫的各個(gè)方面,充分掌握這個(gè)強(qiáng)大的爬蟲利器
    2023-12-12
  • Numpy之reshape()使用詳解

    Numpy之reshape()使用詳解

    今天小編就為大家分享一篇Numpy之reshape()使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python3.5裝飾器原理及應(yīng)用實(shí)例詳解

    Python3.5裝飾器原理及應(yīng)用實(shí)例詳解

    這篇文章主要介紹了Python3.5裝飾器原理及應(yīng)用,結(jié)合具體實(shí)例形式詳細(xì)分析了Python3.5裝飾器的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • python讀取與寫入tif圖片的完整信息(過程詳解)

    python讀取與寫入tif圖片的完整信息(過程詳解)

    這篇文章主要介紹了python讀取與寫入tif圖片的完整信息,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Python實(shí)現(xiàn)按逗號(hào)分隔列表的方法

    Python實(shí)現(xiàn)按逗號(hào)分隔列表的方法

    今天小編就為大家分享一篇Python實(shí)現(xiàn)按逗號(hào)分隔列表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 通過python-pptx模塊操作ppt文件的方法

    通過python-pptx模塊操作ppt文件的方法

    這篇文章主要介紹了通過python-pptx模塊操作ppt文件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,本文給大家介紹的需要的朋友可以參考下
    2020-12-12
  • Python實(shí)現(xiàn)的監(jiān)測(cè)服務(wù)器硬盤使用率腳本分享

    Python實(shí)現(xiàn)的監(jiān)測(cè)服務(wù)器硬盤使用率腳本分享

    這篇文章主要介紹了Python實(shí)現(xiàn)的監(jiān)測(cè)服務(wù)器硬盤使用率腳本分享,本文腳本適應(yīng)windows和linux系統(tǒng),需要的朋友可以參考下
    2014-11-11
  • Python數(shù)據(jù)分析之分析千萬級(jí)淘寶數(shù)據(jù)

    Python數(shù)據(jù)分析之分析千萬級(jí)淘寶數(shù)據(jù)

    網(wǎng)購已經(jīng)成為人們生活不可或缺的一部分,本次項(xiàng)目基于淘寶app平臺(tái)數(shù)據(jù),通過相關(guān)指標(biāo)對(duì)用戶行為進(jìn)行分析,從而探索用戶相關(guān)行為模式。感興趣的可以學(xué)習(xí)一下
    2022-03-03

最新評(píng)論

富锦市| 宁化县| 卢湾区| 灵武市| 永吉县| 五台县| 仙居县| 林芝县| 玉屏| 浮梁县| 伽师县| 浙江省| 托克托县| 邵阳县| 洛隆县| 北京市| 鸡东县| 饶平县| 于都县| 时尚| 兴业县| 南乐县| 深水埗区| 麻城市| 时尚| 莲花县| 盐边县| 遂昌县| 会泽县| 普定县| 南平市| 黑水县| 伊川县| 遂溪县| 怀仁县| 班玛县| 天津市| 崇信县| 汉川市| 嘉荫县| 杨浦区|