pandas фрейм данных добавляет столбцы значений на основе списка значений, если шаблон регулярного выражения соответствует - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть следующий список с шаблонами Regex и другими значениями в списке, а также другая информация, связанная с шаблоном.

Regexes = ['. * PERSONAL [ \ W] * A CC (((OU)? N)? T | N (UM | BR | O (?! [AZ]))). * ',' A CC INFO ',' ИНФОРМАЦИЯ ОБ ИДЕНТИФИКАЦИИ ','. * (АДРЕС | ( | \ b) ADDR) ([ \ W] * LINE | LN)? [ \ W] \ d ',' ADDRESS ',' ADDRESS INFO ' , '. (_ | \ b) (GE? NDE? R | SEX | MALE | FEMALE) (_ | \ b). ', 'GENDER INFO', 'BIOGRAPHI C INFO', '(CHE (CK | QUE) |. * CHE (CK | QUE) [_ \ W] N (UM | BR |?!. O ([AZ])) )', 'INSTRUMENT_NUMBER' , 'ФИНАНСОВАЯ ИНФОРМАЦИЯ']

Приведенный выше список содержит значения для шаблона регулярных выражений, типа с секретом и категории с секретом. Приведенный выше список является лишь примером, у меня есть что-то вроде 400 шаблонов регулярных выражений .

Первый элемент - это шаблон регулярного выражения, а второй - senstive_type, а третий элемент - senstive_category.

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

INPUT:

+-----------------------------------+---------------------+-------------------+
| NAME                              |SENSITIVE_TYPE       | SENSTIVE_CATEGORY |
+-----------------------------------+---------------------+-------------------+
| PERSONAL_NUMBER                   |                     |                   |
| GENDER FLAG                       |                     |                   |
| SEX_FLAG                          |                     |                   |
| CHECK_NUMBER                      |                     |                   |
| CHECK_NO                          |                     |                   |
| ADDRESS_1                         |                     |                   |
| ADDRESS_2                         |                     |                   |
+-----------------------------------+---------------------+-------------------+         

Итак, код должен содержать столбец от l oop до NAME в фрейме данных, и если NAME столбец совпадает с шаблоном регулярного выражения из первого элемента в списке, затем код должен обновить столбцы чувствительный_тип и чувствительный_категории во фрейме данных из соответствующих значений в списке.

ВЫХОД:

+-----------------------------------+---------------------+--------------------+
| NAME                              |SENSITIVE_TYPE       | SENSTIVE_CATEGORY  |
+-----------------------------------+---------------------+--------------------+
| PERSONAL_NUMBER                   | ACC INFO            | IDENTIFICATION INFO|
| GENDER FLAG                       | GENDER INFO         | BIOGRAPHIC INFO    |
| SEX_FLAG                          | GENDER INFO         | BIOGRAPHIC INFO    |
| CHECK_NUMBER                      | INSTRUMENT NUMBER   | FINANCIAL INFO     |
| CHECK_NO                          | INSTRUMENT NUMBER   | FINANCIAL INFO     |
| ADDRESS_1                         | ADDRESS             | ADDRESS INFO       |
| ADDRESS_2                         | ADDRESS             | ADDRESS INFO       |
+-----------------------------------+---------------------+--------------------+

Код:

import sys
import csv
import re
import pandas as pd

df = pd.read_csv('c:\samples\data.csv')

Regexes = ['.*PERSONAL[_\\W]*ACC(((OU)?N)?T|N(UM|BR|O(?![A-Z]))).*', 'ACC INFO', 'IDENTIFICATION INFO', 
'.*(ADDRESS|(_|\\b)ADDR)([_\\W]*LINE|LN)?[_\\W]*\\d*', 'ADDRESS', 'ADDRESS INFO', 
'.*(_|\\b)(GE?NDE?R|SEX|MALE|FEMALE)(_|\\b).*', 'GENDER INFO', 'BIOGRAPHIC INFO',
'(CHE(CK|QUE)|.*CHE(CK|QUE)[_\\W]*N(UM|BR|O(?![A-Z])).*)','INSTRUMENT NUMBER', 'FINANCIAL INFO']

regex_pattern= Regexes[0::3]
senstive_category=Regexes[1::3]
senstive_type=Regexes[2::3]

for result in df.NAME:
    if re.search(regex_pattern, result): 
        df.assign(SENSITIVE_CATEGORY=[Regex_cat])
        df.assign(SENSITIVE_TYPE=Regex_type)
        print(df)
    else:
        pass

Я не уверен, как этого достичь? Любое предложение по решению было бы замечательно.

Примечание. Также весь список регулярных выражений также можно создавать как фрейм данных, но я даже не знаю, как кодировать с двумя фреймами данных и получить желаемый результат.

Спасибо

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