Панды против PEP8: выбор истинных значений в серии со смешанными типами - PullRequest
2 голосов
/ 14 апреля 2019

У меня есть DataFrame с именем df со столбцом col, содержащим значения True, False и "N/A" (типы bool, bool и str соответственно). Я хочу выбрать только строки, содержащие True.

df[df.col==True] работает, но выдает предупреждение PEP 8: comparison to True should be 'if cond is True:' or 'if cond:'.

Есть ли PEP8-совместимый способ сделать это?

1 Ответ

1 голос
/ 14 апреля 2019

Подобные вопросы задавались ранее, например, панд: Должен ли я отклоняться от соглашений стиля (PEP 8)? , но все они описывают простой случай, когда у вас есть столбец только True и False значения. И в этом случае вы могли бы сделать просто df[df.col].

В вашем случае вы не можете этого сделать, потому что это выдаст ошибку, но у вас есть несколько других вариантов:

  1. Использование pd.Series.eq:

    >>> df = pd.DataFrame({'col': [True, False, 'N/A']})
    >>> df[df.col.eq(True)]
        col
    0  True
    
  2. Сначала проверьте "N/A", а затем сравните то, что осталось, до True. Заказ имеет значение:

    >>> df[(df.col != 'N/A') & df.col]
        col
    0  True
    
  3. Замена "N/A" на np.nan и использование pd.Series.notnull или pd.Series.notna:

    >>> df = df.replace('N/A', np.nan)
    >>> df[df.col.notnull() & df.col]
        col
    0  True
    
...