Как удалить последнюю строку, в которой поле не содержит ни одного?

#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"]]