как передать столбец dataframe в CommonRegex - PullRequest
0 голосов
/ 07 ноября 2019

Как мы можем передать столбец datafarme в библиотеку commonregex и скрыть данные, если они совпадают со значением регулярного выражения

    from commonregex import CommonRegex

    address = ['61 Park Street, Camden, ME, 04843, US', '1208 BEECHCRAFT BLVD','6704 BEECHCRAFT', 'PO BOX 469', '6461 44TH AVE' , '11026 BELLE HAVEN DR']
    df = pd.DataFrame(address, columns = ['Address'])
    parser = CommonRegex()
    parser.street_addresses(df.Address)

Выдает ошибку

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().


df['new'] = df.Address.apply(lambda x: next(iter(parser.street_addresses(x)), ''))
print (df)
                                 Address                  new
0  61 Park Street, Camden, ME, 04843, US      XXXXXXXXXXXXXXX
1                   1208 BEECHCRAFT BLVD                     
2                        6704 BEECHCRAFT                     
3                             PO BOX 469                     
4                          6461 44TH AVE        XXXXXXXXXXXXX
5                   11026 BELLE HAVEN DR  XXXXXXXXXXXXXXXXXXX

1 Ответ

1 голос
/ 07 ноября 2019

Использование Series.apply:

df['new'] = df.Address.apply(parser.street_addresses)

Или:

df['new'] = df.Address.apply(lambda x: parser.street_addresses(x))

Или list comprehension:

df['new'] = [parser.street_addresses(x) for x in df.Address]

print (df)
                                 Address                    new
0  61 Park Street, Camden, ME, 04843, US      [61 Park Street,]
1                   1208 BEECHCRAFT BLVD                     []
2                        6704 BEECHCRAFT                     []
3                             PO BOX 469                     []
4                          6461 44TH AVE        [6461 44TH AVE]
5                   11026 BELLE HAVEN DR  [1026 BELLE HAVEN DR]

Если хотите получить первое совпадающее значение, добавьте next с iter для возможного совпадения со значением по умолчанию, если пустые списки:

df['new'] = df.Address.apply(lambda x: next(iter(parser.street_addresses(x)), ''))
print (df)
                                 Address                  new
0  61 Park Street, Camden, ME, 04843, US      61 Park Street,
1                   1208 BEECHCRAFT BLVD                     
2                        6704 BEECHCRAFT                     
3                             PO BOX 469                     
4                          6461 44TH AVE        6461 44TH AVE
5                   11026 BELLE HAVEN DR  1026 BELLE HAVEN DR

Или, если необходимо, объедините все возможные значения в списках с разделителем:

df['new'] = df.Address.apply(parser.street_addresses).str.join(', ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...