Удалить столбцы при соблюдении условия

Мне необходимо записать файл на основе другого. В исходном файле есть значения 'ND' нужно исключить столбцы, где встречаются такие данные. Пробовал искать методом "np.isnan" он не находит все такие столбцы. Поэтому использую:

 qqq = np.sum(np.where(z1 == 'ND'))
    if (qqq > 0):
        count+=1
        #df.drop(df.columns[[j]], axis=1, inplace=True)

но не получается удалить столбцы при помощи df.drop. Файл с данными находится здесь файл

Весь код:

import pandas as pd
import numpy as np


df = pd.read_csv('FRB.csv')
a = df.shape
count = 0
print("a=", a)
for j in range(0, a[1]):
    z1 = df.iloc[:, j].values
    qqq = np.sum(np.where(z1 == 'ND'))
    if (qqq > 0):
        count+=1
        #df.drop(df.columns[[j]], axis=1, inplace=True)
    print("j=", j, "qqq=", qqq, type(qqq), "len(z1)=", len(z1))

a = df.shape
print(count, "a=", a)

Ответы (2 шт):

Автор решения: Nikolay

Можно заменит данное значение на NaN

df = df.replace({'ND' : np.nan})

А затем удалить значения NaN

df.dropna(axis = 1, inplace = True)
→ Ссылка
Автор решения: MaxU

Воспользуйтесь параметром pd.read_csv(..., na_values=["ND"]) - при помощи этого параметра можно и нужно указывать все значения (дополнительно к значениям по умолчанию: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’.), которые должны восприниматься как NaN:

df = pd.read_csv("FRB.csv", header=None, na_values=["ND"]).dropna(axis=1)

результат:

In [70]: df.shape
Out[70]: (372, 82)
→ Ссылка