Как извлечь, где выражение reg не совпадает в столбце фрейма данных? - PullRequest
1 голос
/ 03 мая 2020

У меня есть два фрейма данных:

OrderedDict([('page1',     name       dob
          0   John  07-20200
          1  Lilly   05-1999
          2  James   02-2002), ('page2',      name       dob
          0   Chris   07-2020
          1  Robert   05-1999
          2    barb  02-20022)])

Я хочу выполнить свое выражение reg для каждой даты в обоих фреймах данных, и если они все совпадают, я хочу продолжить работу с моей программой, и если нет match Я хочу напечатать сообщение, которое показывает случаи, когда имя df, индекс и дата неверны, например:

INVALID DATE: Page1: index 0: dob: 02-20200
INVALID DATE: Page2: index 2: dob: 02-20022

Я дошел до этой точки

    date_pattern = r'(?<!\d)((?:0?[1-9]|1[0-2])-(?:19|20)\d{2})(?!\d)'
    for df_name, df in employee_dict.items():
    x = df[df.dob.str.contains(date_pattern, regex=True)]
    print(x)

, которая печатает там, где они делают совпадать в формате таблицы, но я хочу напечатать там, где они не совпадают в отдельных операторах печати

есть идеи?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Вы можете выполнять итерацию по всем строкам фреймов данных, и, если запись не соответствует вашему шаблону, вы можете сгенерировать сообщение по вашему выбору:

for df_name, df in employee_dict.items():       # Iterate over your DFs
  for index, row in df.iterrows():              # Iterate over DF rows 
    if not re.search(date_pattern, row['dob']): # If the dob column value has no match
      print("INVALID DATE: {}: index {}: dob: {}".format(df_name, index,row['dob']))  # Print error message

Если ваш df равен pd.DataFrame({'dob': ['05-2020','4-2020','07-1999','2-2001','1-20202020','112-2020']}) , результаты будут

INVALID DATE: page1: index 4: dob: 1-20202020
INVALID DATE: page1: index 5: dob: 112-2020
0 голосов
/ 03 мая 2020

Вы ищете Series.str.match.

По сути, вам нужно извлечь серию dob, которую, как я полагаю, вы делаете с df['dob'], и сделать result = df['dob'].str.match(date_pattern). Результатом будет ряд значений True и False, соответствующих их соответствующим значениям df['dob'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...