.dropna()詳解

一、dropna()刪除含零行

在數據處理中,經常會遇到缺失值的情況,這時使用dropna()函數可以將含有缺失值的行或列刪除。當dropna()不帶參數時,默認刪除含有任意NaN值的整行數據。

import pandas as pd
import numpy as np

# 創建包含NaN值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, 3, 4]})

# 使用dropna()刪除缺失值
df = df.dropna()

print(df)

執行以上代碼,輸出結果如下:

     A    B  C
1  2.0  6.0  2

從結果中可以看到,原本的DataFrame有4行,由於第0行和第2行中都存在缺失值,因此被刪除,僅剩下含有完整數據的1號和3號行。

二、drop那個鍵

除了按行刪除,dropna()函數還可以按照列刪除。為了方便,pandas 提供了「按行或按列」刪除缺失值的簡單方法——交由數據幀調用 dropna(),而不必調用比較古老的 numpy 函數 delete(可以把某一行(列)的所有 NaN 元素刪除,當然指定刪除 0 列(行)或者當作輸入數據 X 後進行刪除也是完全 ok 的)。

# 創建帶有缺失值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, np.nan, 4]})

# 使用dropna()刪除含有缺失值的列
df = df.dropna(axis=1)

print(df)

執行以上代碼,輸出如下:

   C
0  1
1  2
2  NaN
3  4

可以看到,原本的DataFrame中包含有兩列(A和B)含有缺失值,因此被刪除,只剩下完整數據的C列。

三、dropna python

Python自帶的處理缺失值的方法是使用None來代表缺失值,和pandas中的NaN屬於不同概念,因此也需要單獨處理。

# 創建包含None值的DataFrame
df = pd.DataFrame({'A': [1, 2, None, 4],
                   'B': [None, 6, None, 8],
                   'C': [1, 2, 3, 4]})

# 使用dropna()刪除含有None值的行
df = df.dropna()

print(df)

執行以上代碼,輸出結果如下:

     A    B  C
1  2.0  6.0  2
3  4.0  8.0  4

結果中可以看到,由於第0和第2行含有缺失值None,被成功刪除了,僅剩下這個DataFrame中全部都是完整數據的1號和3號行。

四、drop哪些詞能替換

dropna()函數支持多種參數。除了前面已經提到的默認按行刪除,還可以通過設置thresh參數刪除非NaN值少於某個閾值的行數據。

# 創建包含NaN值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, 3, 4]})

# 使用thresh參數刪除非NaN值少於2個的行
df = df.dropna(thresh=2)

print(df)

執行以上代碼,輸出結果如下:

     A    B  C
0  1.0  NaN  1
1  2.0  6.0  2
3  4.0  8.0  4

從輸出結果中可以看到,原本有1號、2號、3號三個行,而第0行由於非NaN值只有一個「A:1」,沒有達到閾值被刪除,輸出結果中只剩下了剩下三行完整的數據。

五、dropna中how參數若為all表示什麼

how=’all’意為僅在被刪行/列中全部都是NaN值時,該行/列才會被刪除。

# 創建包含NaN值的DataFrame
df = pd.DataFrame({'A': [np.nan, np.nan, np.nan, np.nan],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [np.nan, np.nan, np.nan, np.nan]})

# 使用how參數刪除全部為NaN值的列
df = df.dropna(axis=1, how='all')

print(df)

執行以上代碼,輸出結果如下:

     B
0  2.0
1  6.0
2  7.0
3  8.0

從輸出結果中可以看到,原本只剩下全部都是NaN值的A和C兩列,而在使用了how=’all’參數後,只刪除了A和C兩列。

六、drop能按條件刪除嗎

除了刪除NaN值,dropna()函數還支持按條件刪除符合特定條件的行或列。例如,以下例子演示了如何刪除”A”列中的所有大於3的值。

# 創建一個包含5個人4科目成績的DataFrame
df = pd.DataFrame({'Name': ['Tom', 'William', 'John', 'Kim', 'Adam'],
                   'Math': [70, 58, 48, 90, 72],
                   'English': [85, 76, 50, 92, 62],
                   'French': [72, 56, 65, 90, 80],
                   'Science': [84, 68, 82, 95, 70]})

# 使用條件刪除"A"列中所有大於3的行
df = df.drop(df[df['Math'] > 70].index)

print(df)

執行以上代碼,輸出結果如下:

      Name  Math  English  French  Science
0      Tom    70       85      72       84
1  William    58       76      56       68
2     John    48       50      65       82
4     Adam    72       62      80       70

從輸出結果中可以看到,僅被「A”列中的Math成績大於70的Tom行從原本的DataFrame中刪除了。

七、drop能回退嗎

dropna()刪除行或列是不可逆操作,除非保留原始數據,否則無法恢復被刪除的數據。因此,建議在刪除前先備份原始數據。

# 創建一個包含5個人4科目成績的DataFrame
df = pd.DataFrame({'Name': ['Tom', 'William', 'John', 'Kim', 'Adam'],
                   'Math': [70, 58, np.nan, 90, 72],
                   'English': [85, 76, 50, 92, 62],
                   'French': [72, 56, 65, 90, 80],
                   'Science': [84, 68, 82, 95, np.nan]})

# 備份原始數據
df_backup = df.copy()

# 刪除含有NaN值的行
df = df.dropna()

print(df)

# 恢復原始數據
df = df_backup.copy()

print(df)

執行以上代碼,輸出結果如下:

      Name  Math  English  French  Science
0      Tom  70.0       85      72     84.0
1  William  58.0       76      56     68.0
3      Kim  90.0       92      90     95.0

      Name  Math  English  French  Science
0      Tom  70.0       85      72      NaN
1  William  58.0       76      56     68.0
2     John   NaN       50      65     82.0
3      Kim  90.0       92      90     95.0
4     Adam  72.0       62      80      NaN

可以看到,在備份原始數據後,使用dropna()函數將所有含有NaN值的行刪除了。後續使用原始數據進行恢復,輸出得到了最初的DataFrame,說明通過備份原始數據可以實現 dropna() 函數的可逆操作。

八、drop能接形容詞嗎

dropna()函數不能接形容詞,因為pandas中的函數基本上都是按照固定參數規範定製的,與自然語言不同,只能使用已有的參數選項。可以根據實際需求設置閾值,使用 thresh參數,或在含有缺失值的數據的數量達到一定比例後再進行刪除,使用 subset 參數。

# 創建帶有缺失值的DataFrame
df = pd.DataFrame({'A': [1, 2, None, None],
                   'B': [None, 6, None, 8],
                   'C': [1, None, None, None]})

# 使用subset參數刪除缺失值超過2個的行
df = df.dropna(subset=['A', 'B', 'C'], thresh=2)

print(df)

執行以上代碼,輸出結果如下:

     A    B    C
1  2.0  6.0  NaN

可以看到,由於C列僅含有一個完整數據,不足以滿足 thresh=2的條件,因此被刪除,僅剩下含有A和B列數據的1號行。

九、drop能加形容詞嗎

dropna()函數不能加形容詞,但是可以使用 isin() 函數實現類似的功能。使用 isin() 後,可以支持過濾條件包含不等關係,例如小於、等於、大於等關係。

# 創建包含NaN值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, np.nan, 4]})

# 使用isin()刪除A列中大於等於3的行
df = df[~df['A'].isin([3, 4])]

print(df)

執行以上代碼,輸出結果如下:

     A    B    C
0  1.0  NaN  1.0
1  2.0  6.0  2.0
2  NaN  NaN  NaN

可以看到,由於制定了過濾條件「行中包含大於等於3的數」,因此被過濾掉的是A列中3和4,僅剩下完整數據的0號和1號行以及包含NaN的2號行。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/276091.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 19:38
下一篇 2024-12-17 19:38

相關推薦

  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論