#python #pandas
#python #pandas
Вопрос:
Учитывая следующий фрейм данных:
df = pd.DataFrame(
{
"id_": [1, 2, 3, 4, 5, 6, 7],
"date": [1, 2, 2, 3, 3, 3, 4],
"existing": ["Y", "Y", None, "Y", None, None, "Y"],
}
)
Я хотел бы удалить последнюю строку, где existing
равно None
. Я пробовал следующее:
df = df.drop(df[df["existing"] is None].tail(1).index)
Однако я получаю следующую ошибку:
Exception has occurred: KeyError
False
Где я ошибаюсь? Было бы здорово, если бы кто-нибудь мог объяснить, почему, чтобы я мог изучить логику ошибки!
Ответ №1:
Мы должны сделать isnull
или isna
df = df.drop(df.index[df.existing.isnull()][-1])
Out[175]:
id_ date existing
0 1 1 Y
1 2 2 Y
2 3 2 None
3 4 3 Y
4 5 3 None
6 7 4 Y
Исправьте свой код
df.drop(df[[x is None for x in df["existing"]]].tail(1).index)
Out[177]:
id_ date existing
0 1 1 Y
1 2 2 Y
2 3 2 None
3 4 3 Y
4 5 3 None
6 7 4 Y
Комментарии:
1.
df["existing"]
это серия pandas,df["existing"] is None
переводится какFalse
. У вас нет столбца с именемFalse
, поэтомуdf[df["existing"] is None]
возвращаетKeyerror
.2. @Jossy df[«existing»] is None проверяет каждую ячейку, но вы передали ей столбец, это не приведет к результату, вы можете выполнить цикл for
[x is None for x in df["existing"]]