#python #pandas #dataframe #nan
Необходимо удалить все строки DataFrame, где значение столбца filename равно NaN. Код: for n in range(len(df_common_fin)): if df_common_fin.iloc[n, 'filename'] == np.nan: df_common_fin.drop(index=n) не работает, хотя прохожу по порядковым индексам iloc. Выдается ошибка: ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is EXCLUDED), listlike of integers, boolean array] types такой код: for n in range(len(df_common_fin)): if df_common_fin['filename'][n] == np.nan: df_common_fin.drop(index=n,axis=0) так же выдаешь ошибку: KeyError: 0
Ответы
Ответ 1
Воспользуйтесь методом DataFrame.dropna(subset=['colX','colY']): df_common_fin = df_common_fin.dropna(axis='index', how='any', subset=['filename']) Ошибка в вашем коде вызвана тем что "accessor" df.iloc[] воспринимает только позиционные аргументы, как для индекса, так и для столбцов. Т.е. df_common_fin.iloc[n, 'filename'] надо переписать так: df_common_fin.iloc[n,] Следующая проблема, которая бы у вас возникла это: np.nan != np.nan - как следствие конструкция if ... всегда была бы ложной: In [139]: np.nan == np.nan Out[139]: False In [140]: np.nan != np.nan Out[140]: True т.е. одна "неопределенность" не обязательно равна другой "неопределенности". Поэтому в Pandas существуют функции для работы с NaN: pd.isna, pd.isnull pd.nontna, pd.notnull DataFrame.isna, DataFrame.isnull DataFrame.notna, DataFrame.notnull DataFrame.dropna
Комментариев нет:
Отправить комментарий