#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()