Перебираем фрейм данных, чтобы найти строки, в которых есть объект datetime.datetime

#python #pandas #datetime

#python #панды #datetime

Вопрос:

Предположим, у меня есть следующий фрейм данных:

 d = {'col1':['a','b','c'],
    'col2':['d','e', date(2019, 4, 13)],
    'col3':[1,date(2015, 5, 10),3]}
df = pd.DataFrame(d)
 

Я хочу найти строки, в которых есть datetime объекты. Результатом будет

  index col1        col2        col3
0      1    b           e  2015-05-10
1      2    c  2019-04-13           3
 

Причина, по которой я спрашиваю об этом, заключается в том, что в моем фактическом фрейме данных я получаю следующую ошибку:

 TypeError: must be real number, not datetime.datetime
 

Это означает, что где-то в фрейме данных есть datetime.datetime значение, которого не должно быть. Итак, я хочу просмотреть фрейм данных who и найти именно эти строки по типу объекта и в конечном итоге удалить их.

Ответ №1:

Попробуйте applymap :

 mask = df.applymap(lambda x: type(x) == datetime.date).any(1)
df[mask]
 

Вывод:

   col1        col2        col3
1    b           e  2015-05-10
2    c  2019-04-13           3