Вывести строки в которых нет столбца с nan

Мне нужно вывести все строки в которых столбец Age не равен nan

p = pd.read_csv('output.csv', sep=';', encoding='Windows-1251')
word = 'nan' 
for line in p.Age:
    if word not in line:
        print(line)

но при попытке выполнения данного кода выдаёт ошибку

Traceback (most recent call last):
  File "C:/Users/user/Desktop/project/py.py", line 22, in <module>
    if word not in line:
TypeError: argument of type 'float' is not iterable

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

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

Сделайте просто так, «пандасонично», чтобы выбрать вами требуемы строки таблицы:

p[p.Age.notna()]

(и для вывода используйте то же самое выражение в функции print()).


Объяснение:

p.Age серия чисел (столбец), значит в вашей команде

for line in p.Age:

будет в переменной line не строка таблицы p, а число (типа float), как вам сообщает текст ошибки. Потому вы не можете сделать if word not in line:.

→ Ссылка
Автор решения: MaxU

Кроме способа, указанного @MarianD, можно воспользоваться особым свойством NaN:

In [23]: np.nan == np.nan
Out[23]: False

Т.е. NaN не равен самому себе. Это даёт нам возможность воспользоваться удобным методом DataFrame.query():

print(p.query("Age == Age"))

выведет все строки для которых Age == Age - т.е. только те для которых Age != NaN


NOTE: решение от @MarianD является более предпочтительным, потому что оно более явно указывает на намерения автора кода. Решение с использованием метода df.query() удобно использовать когда мы фильтруем фрейм сразу по многим критериям.

→ Ссылка