У меня есть DataFrame с некоторым NA, и я хочу удалить строки, в которых у определенного столбца есть значения NA.
Моим первым испытанием было: - Определение строк, в которых значения определенных столбцов были NA - Passих в pandas.drop ()
В моем конкретном случае у меня есть DataFrame 39164 строк на 40 столбцов. Если я посмотрю на NA в определенных столбцах, то обнаружу 17715 связанных ярлыков, которые я сохранил в выделенную переменную. Затем я отправил их в pandas.drop (), ожидая, что осталось около 22000 строк, но я получил только 2001. Если я использую pandas.dropna (), у меня останется 21449 строк, что я и ожидал.
Здесьследует моему кодуПервая часть кода загружает данные с gouv.fr (извините за то, что вы не используете поддельные данные ... но выполнение займет не более 10 секунд). ВНИМАНИЕ: только последние 5 лет хранятся в онлайн-базе данных. Так что мой пример должен быть адаптирован позже ...
import pandas as pd
villes = {'Versailles' : '78646',
'Aix-en-Provence' : '13001'}
years = range(2014,2019)
root = "https://cadastre.data.gouv.fr/data/etalab-dvf/latest/csv/"
data = pd.DataFrame({})
for ville in villes.keys() :
for year in years :
file_addr = '/'.join([root,str(year),'communes',villes[ville][:2],villes[ville]+'.csv'])
print(file_addr)
tmp = pd.read_csv(file_addr)
data =pd.concat([data,tmp])
Это вторая часть, где я пытаюсь отбросить несколько строк. Как уже говорилось, результаты сильно различаются в зависимости от выбранной стратегии (данные_1 против данных_2). data_2, полученные dropna () - это ожидаемые результаты.
print(data.shape)
undefined_surface = data.index[data.surface_reelle_bati.isna()]
print(undefined_surface)
data_1 = data.drop(undefined_surface)
data_2 = data.dropna(subset=['surface_reelle_bati'])
print(data_1.shape)
print(data_2.shape)
Использование dropna () полностью подходит для меня, но я хотел бы понять, что я делал неправильно с drop (), так как я получилочень глупый результат по сравнению с моими ожиданиями, и я хотел бы знать об этом в будущем ... Заранее спасибо за помощь.