@We1rd

(Pandas) Почему не работает df.dropna()?

Код:
import pandas as pd

file_name = 'vacancies_for_learn_demo.csv'
vac_name = input()
df = pd.read_csv(file_name)
df = df.loc[df['salary_currency'] == 'RUR']
df = df.dropna()
total = df.shape[0]
cities_count = df.groupby('area_name').count().reset_index()
cities_count = cities_count.where(cities_count['name'] >= total / 100)
used_cities = cities_count['area_name'].to_list()
df = df.where(df['area_name'].apply(lambda x: x in used_cities))
print(df['published_at'])

Вывод:
0      2017-07-01T20:06:27+0300
1      2017-07-06T20:16:49+0300
2      2017-07-21T17:27:12+0300
3                           NaN
4      2017-07-24T16:17:05+0300
                 ...           
992    2023-05-15T17:16:41+0300
994    2023-05-19T11:07:15+0300
997    2023-05-31T16:42:33+0300
998    2023-06-02T12:39:27+0300
999    2023-06-06T18:59:01+0300
Name: published_at, Length: 853, dtype: object

Текстового значения "NaN" в csv файле не нашел.
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ответы на вопрос 2
@We1rd Автор вопроса
Разобрался, судя по всему df.where() заменяет строки, не соответствующие условию, на NaN, т.е. после where надо опять чистить от NaNов
Ответ написан
Комментировать
Maksim_64
@Maksim_64
Data Analyst
df = df.dropna() Ну на всякий случай проверь после этой строчки df.isnull().sum() Должны быть нули, далее там же проверь не попало ли строковое значение (df == 'NaN').sum()
Если же нет значит в результате в от этой операции
df = df.where(df['area_name'].apply(lambda x: x in used_cities))
появляется NaN, что собственно логично, ты предоставляешь , булевый массив True, False. где pandas оставит оригинальное значение где состояние True и заменит на твое (которое ты не предоставил) где значение False. То есть вторым параметром ты должен был предоставить значение, (по умолчанию оно NaN).
df = df.where(df['area_name'].apply(lambda x: x in used_cities), 'Твое значение')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы