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
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), 'Твое значение')