簡體   English   中英

當存在多個 Null 值時,刪除帶有 pandas 數據幀的行

[英]Dropping rows with pandas data frame when multiple Null values exist

我正在嘗試通過數據框中的每一行 go 並檢查所選行是否有超過 3 個 null 值(這部分有效),然后刪除整行。 但是,在嘗試從數據框中刪除所述行時,我遇到了一個錯誤:

AttributeError: 'NoneType' object 沒有屬性 'index'

如果這段代碼效率低下,請原諒我,我只需要它工作。

import pandas as pd

df = pd.read_csv('data/mycsv.csv')


i = 0

while i < len(df.index):
    if df.iloc[i].isnull().sum() > 3:    
        df = df.drop(df.index[i], inplace = True)
    i += 1

使用DataFrame.dropnathresh ,但因為它是非 NaN 列需要減去列的長度:

np.random.seed(2021)

df = pd.DataFrame(np.random.choice([np.nan, 1], size=(5,6)))
print (df)
     0    1    2    3    4    5
0  NaN  1.0  1.0  NaN  1.0  NaN
1  NaN  NaN  1.0  NaN  1.0  1.0
2  1.0  1.0  NaN  NaN  NaN  NaN
3  NaN  NaN  1.0  1.0  1.0  1.0
4  NaN  1.0  NaN  1.0  NaN  NaN

N = 3
df1 = df.dropna(thresh=len(df.columns) - N)
print(df1)
    0    1    2    3    4    5
0 NaN  1.0  1.0  NaN  1.0  NaN
1 NaN  NaN  1.0  NaN  1.0  1.0
3 NaN  NaN  1.0  1.0  1.0  1.0


N = 2
df2 = df.dropna(thresh=len(df.columns) - N)
print(df2)
    0   1    2    3    4    5
3 NaN NaN  1.0  1.0  1.0  1.0

您可以過濾行,如果等於或小於boolean indexing中的3 NaN

N = 3
df1 = df[df.isnull().sum(axis=1) <= N]
print (df1)
    0    1    2    3    4    5
0 NaN  1.0  1.0  NaN  1.0  NaN
1 NaN  NaN  1.0  NaN  1.0  1.0
3 NaN  NaN  1.0  1.0  1.0  1.0

使用threshold=X作為dropna的參數,其中 X 是列數 ( df.shape[1] ) 減去閾值 ( 3 )。

假設這個 dataframe

>>> df
     0    1    2    3    4    5
0  NaN  NaN  NaN  NaN  NaN  NaN  # Drop (Nan = 6)
1  NaN  NaN  NaN  NaN  NaN  1.0  # Drop (Nan = 5)
2  NaN  NaN  NaN  NaN  1.0  1.0  # Drop (Nan = 4)
3  NaN  NaN  NaN  1.0  1.0  1.0  # Keep (Nan = 3)
4  NaN  NaN  1.0  1.0  1.0  1.0  # Keep (Nan = 2)
5  NaN  1.0  1.0  1.0  1.0  1.0  # Keep (Nan = 1)
6  1.0  1.0  1.0  1.0  1.0  1.0  # Keep (Nan = 0)
df = df.dropna(thresh=df.shape[1] - 3)
print(df)

     0    1    2    3    4    5
3  NaN  NaN  NaN  1.0  1.0  1.0
4  NaN  NaN  1.0  1.0  1.0  1.0
5  NaN  1.0  1.0  1.0  1.0  1.0
6  1.0  1.0  1.0  1.0  1.0  1.0

暫無
暫無

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

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