#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
Комментариев нет:
Отправить комментарий