Избавьтесь от значений NaT из фрейма данных pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, который выглядит так, как показано ниже

                                mean
comp_name  date                      
Appdynamics 2012-05-01 00:18:15.910000
            2012-05-01             NaT
            2012-05-01             NaT
            2012-05-02 00:20:12.145200
            2012-05-02             NaT
            2012-05-02             NaT
  

Здесь comp_name и дата образуют мультииндекс. Я хочу избавиться от значений NaT и получить только те строки, где среднее значение (timedelta64) не является NaT.

                                mean
comp_name  date                      
Appdynamics 2012-05-01 00:18:15.910000
            2012-05-02 00:20:12.145200
  

Есть идеи по этому поводу?

Комментарии:

1. dropna() не работает для этого?

2. К сожалению, нет.

Ответ №1:

pandas.notnull() принимает ряд и возвращает логический ряд, который является истинным, если входной ряд не равен нулю (None, np.NaN, np.NaT). Затем вы можете нарезать фрейм данных логическим рядом:

 df[pandas.notnull(df['mean'])]
  

Комментарии:

1. Как вы можете проверить наличие сразу 2 столбцов, например, df['mean', 'score'] ?

2. В зависимости от того, чего вы хотите: df['mean','score'].isnull().any(axis=1) или df['mean','score'].isnull().all(axis=1)

3. В последних версиях нарезку лучше выполнять таким образом: df.loc[df.mean.notnull()]

Ответ №2:

В Pandas 1.4.1 dropna избавляется от NaT значений. Источник: документация, и я ее использую. Итак, теперь это так просто, как

 df = df.dropna()