Вы можете сделать это, используя .str.match
.
Если ваш столбец называется '0'
, он выглядит следующим образом:
indexer=df['0'].str.match('\d{1,2}\/\d{1,2}\/\d{4}$')
df[indexer]
Если вы хотите выбрать все строки, которые содержатшаблон в любом из строковых столбцов, вы можете сделать:
# v- select takes all object columns
# v- apply the lambda expression to each of the selected object columns with True if the row contains the pattern in the specific column
# v- if any of the column vectors contains True, return True, otherwise False (the column vectors contain the result of str.match which is a boolean)
indexer=df.select_dtypes('O').apply(lambda ser: ser.str.match('\d{1,2}\/\d{1,2}\/\d{4}$'), axis='index').any(axis='columns')
df[indexer]
Но обратите внимание, что это работает, только если все ваши столбцы object
на самом деле хранят строки. Что обычно имеет место, если вы позволяете пандам определять типы столбцов при создании кадра данных. Если это не так, вам нужно добавить проверку типа, чтобы избежать ошибки времени выполнения:
import re
def filter_dates(ser):
date_re= re.compile('\d{1,2}\/\d{1,2}\/\d{4}$')
return ser.map(lambda val: type(val) == str and bool(date_re.match(val)))
df.select_dtypes('O').apply(filter_dates, axis='index').any(axis='columns')