Вывести строки в которых нет столбца с 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 шт):
Сделайте просто так, «пандасонично», чтобы выбрать вами требуемы строки таблицы:
p[p.Age.notna()]
(и для вывода используйте то же самое выражение в функции print()).
Объяснение:
p.Age серия чисел (столбец), значит в вашей команде
for line in p.Age:
будет в переменной line не строка таблицы p, а число (типа float), как вам сообщает текст ошибки. Потому вы не можете сделать if word not in line:.
Кроме способа, указанного @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() удобно использовать когда мы фильтруем фрейм сразу по многим критериям.