Удалите все строки из фрейма данных, в котором все значения, кроме определенного, равны NaN

#python #pandas

#python #pandas

Вопрос:

У меня очень большой фрейм данных со многими столбцами (почти 300). Я хотел бы удалить все строки, в которых значения всех столбцов, кроме столбца с именем ‘Country’, равны NaN.

dropna может удалять строки, в которых все или некоторые значения равны NaN. Но каков эффективный способ сделать это, если есть столбец, который вы хотите исключить из процесса?

Ответ №1:

Попробуй:

 mask = df.drop("Country",axis=1).isna().all(1) amp; df['Country'].notna()
out = df[~mask]
 

Ответ №2:

Вы можете использовать filter для исключения столбца Country :

 df = pd.DataFrame({"A":[nan, 2, 3,], "Countryside":[nan, 4, 6], "Country":list("ABC")})

     A  Countryside Country
0  NaN          NaN       A
1  2.0          4.0       B
2  3.0          6.0       C

print (df[~df.filter(regex=r"^(?!Countryb)").isnull().all(1)])

     A  Countryside Country
1  2.0          4.0       B
2  3.0          6.0       C
 

Ответ №3:

Это должно сработать:

 def remove_if_eq(v,dataframe,keys):
    for i in df.index:
        delete = True
        for j in df.columns:
            if df[j][i] != v:
                delete = False
                break
        if delete:dataframe = dataframe.drop(i)
    return(dataframe)
 

v — значение
dataframe — это dataframe
ключи — это имена столбцов, которые вы хотите найти