簡體   English   中英

我需要刪除某一列中沒有值或為“null”的所有行:使用 Python 和 Pandas

[英]I need to drop all rows in a certain column where there is no value or is “null”: Using Python and Pandas

我需要刪除某個列中沒有值的所有行,即它是“null”的地方。 但問題是我不知道列的名稱。 但是知道它是第 5 列,所以我已經厭倦了使用一些 iloc 方法,如“notna”和“notnull”(見下文)。 我已經包含了我正在使用的數據類型的示例圖像。 我試圖這樣做的原因是因為在我試圖擺脫的 csv 文件/數據幀的頂部有不同數量的垃圾行。 但是每次的行數都不同,所以我不能使用只會刪除某個已知數量的 header 行的東西。 這就是為什么我試圖刪除某個列中的所有 null 行,因為我知道它也會刪除數據集頂部的所有垃圾行。

這些是我嘗試使用的一些方法,但沒有奏效。

df = df[df[df.iloc[:, 4]].notna()]

df = df[pd.notnull(df[df.iloc[:, 4])]

df = df.dropna(subset=[df.iloc[:, 5]])

因此,例如,在此圖像中,我試圖刪除第 5 列(日期列)為 null 但列名稱不是“日期”的所有行,因為頂部有垃圾行。 我正在嘗試刪除第 5 列中的所有 null 行,以便只保留填充的列,並消除頂部的垃圾行:

請參閱此處的表格

在此處輸入圖像描述

您的前兩個版本有一個額外的df[] 您可以使用:

df = df[df.iloc[:, 4].notna()]

或者:

df = df[pd.notnull(df.iloc[:, 4])]

為了更明確地分解它,這些使用 boolean 索引。 例如,第一個使用df.iloc[:, 4].notna()獲取 notna 的notna索引,然后用它過濾df

notna_boolean_index = df.iloc[:, 4].notna()
df = df.loc[notna_boolean_index] # can also leave out `.loc` for boolean indexes

您可以通過傳遞na_values來簡單地解析您的數據,然后執行drop_na 要處理頂部的垃圾行,您可以在閱讀 csv 時使用skiprows 下面是可以幫助您實現上述目標的示例代碼,

讀取 csv,

df = pd.read_csv('/tmp/test.csv', na_values=['null'], keep_default_na=True, skiprows=3)

雖然我相信 null 默認采用 na 值,但您可以使用上述內容來確保安全。

然后你可以簡單地刪除基於列的 na 行,

df.drop_na(subset=column_name)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM