0

I have a list with sentences and I want to extract the first match of each sentence. I have another list with the same length that I want to be the names of the each columns.

Here's my first list, with the regex:

lista_regex_5_palavras_extract = [
    r'(ouvidoria\W+(\w+\W+){0,5}negou\W+(\w+\W+){0,5}informar\W+(\w+\W+){0,5}protocolo)',
    r'(ouvidoria\W+(\w+\W+){0,5}negou\W+(\w+\W+){0,5}passar\W+(\w+\W+){0,5}protocolo)',
    r'(ouvidoria\W+(\w+\W+){0,5}protocolo\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}reconhecido)',    
    r'(ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}reconhec(\w*\W+)(\w+\W+){0,5}protocolo)', # Radical    
    r'(ouvidoria\W+(\w+\W+){0,5}protocolo\W+(\w+\W+){0,5}ligacao\W+(\w+\W+){0,5}cai)',
    r'(ouvidoria\W+(\w+\W+){0,5}protocolo\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}valido)',
    r'(ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}aceita\W+(\w+\W+){0,5}protocolo)', 
    r'(ouvidoria\W+(\w+\W+){0,5}protocolo\W+(\w+\W+){0,5}invalido)',    
    # Fim da primeira parte
    
    r'(ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}consigu(\w*\W+)(\w+\W+){0,5}prosseguir)', # Radical    
    r'(nao consegu\W+(\w+\W+){0,5}acess(\w*\W+)(\w+\W+){0,5}ouvidoria)', # Radical    
    r'(nao\W+(\w+\W+){0,5}consegu(\w*\W+)(\w+\W+){0,5}reclamar\W+(\w+\W+){0,5}ouvidoria)', # Radical    
    r'(nao consegu(\w*\W+)(\w+\W+){0,5}contato\W+(\w+\W+){0,5}ouvidoria)', # Radical - Sem espaço    
    r'(nao consegu(\w*\W+)(\w+\W+){0,5}falar\W+(\w+\W+){0,5}ouvidoria)', # Radical - Sem espaço    
    r'(nao\W+(\w+\W+){0,5}consegu(\w*\W+)(\w+\W+){0,5}atendimento\W+(\w+\W+){0,5}ouvidoria)', # Radical    
    r'(nao\W+(\w+\W+){0,5}consegu(\w*\W+)(\w+\W+){0,5}registrar\W+(\w+\W+){0,5}ouvidoria)', # Radical    
    r'(dific(\w*\W+)(\w+\W+){0,5}contatar\W+(\w+\W+){0,5}ouvidoria)', # Radical    
    r'(custo\W+(\w+\W+){0,5}falar\W+(\w+\W+){0,5}ouvidoria)',    
    r'(ouvidoria\W+(\w+\W+){0,5}nao consegu(\w*\W+)(\w+\W+){0,5}contato)', # Radical - Sem espaço    
    r'(ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}consegu(\w*\W+)(\w+\W+){0,5}logar)', # Radical    
    r'(ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}consigo\W+(\w+\W+){0,5}logar)',    
    r'(tent\W+(\w+\W+){0,5}ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}consig)', # Radical    
    r'(ouvidoria\W+(\w+\W+){0,5}ligacao\W+(\w+\W+){0,5}cai)',
    r'(minutos\W+(\w+\W+){0,5}aguardando\W+(\w+\W+){0,5}ouvidoria)',
    r'(ouvidoria\W+(\w+\W+){0,5}ninguem\W+(\w+\W+){0,5}atende)',    
    r'(ouvidoria\W+(\w+\W+){0,5}nao atend)', # Radical - Sem espaço    
    r'(ouvidoria\W+(\w+\W+){0,5}nao me atend)', # Radical - Sem espaço    
    r'(ouvidoria\W+(\w+\W+){0,5}nao sou atend)', # Radical - Sem espaço    
    r'(ouvidoria\W+(\w+\W+){0,5}nao\W+(\w+\W+){0,5}reconhece\W+(\w+\W+){0,5}chamado)',    
    r'(ouvidoria nao funciona)', # Sem espaço    
    r'(tentei registrar\W+(\w+\W+){0,5}ouvidoria)', # Sem espaço    
    r'(tentei\W+(\w+\W+){0,5}ouvidoria\W+(\w+\W+){0,5}nao fui atend)', # Radical    
    r'(tentei\W+(\w+\W+){0,5}ouvidoria\W+(\w+\W+){0,5}nao conseg)', # Radical    
    r'(tentei\W+(\w+\W+){0,5}ouvidoria\W+(\w+\W+){0,5}nao atend)' # Radical
]

Here's the list with the column's names:

lista_regex_5_nome_colunas = [
    #'Geral_Regex_5_Palavras',
    'ouvidoria%negou%informar%protocolo_Regex_5_Palavras',
    'ouvidoria%negou%passar%protocolo_Regex_5_Palavras',
    'ouvidoria%protocolo%não%reconhecido_Regex_5_Palavras',
    'ouvidoria%não%reconhec%protocolo_Regex_5_Palavras',
    'ouvidoria%protocolo%ligação%cai_Regex_5_Palavras',
    'ouvidoria%protocolo%não%valido_Regex_5_Palavras',
    'ouvidoria%não%aceita%protocolo_Regex_5_Palavras', 
    'ouvidoria%protocolo%invalido_Regex_5_Palavras',
    'ouvidoria%nao%consigu%prossegui_Regex_5_Palavras', 
    'nao%consegu%acess%ouvidoria_Regex_5_Palavras', 
    'nao%consegu%reclamar%ouvidoria_Regex_5_Palavras',
    'nao%consegu%contato%ouvidoria_Regex_5_Palavras',
    'nao%consegu%falar%ouvidoria_Regex_5_Palavras',
    'nao%consegu%atendimento%ouvidoria_Regex_5_Palavras',
    'nao%consegu%registrar%ouvidoria_Regex_5_Palavras',
    'dific%contatar%ouvidoria_Regex_5_Palavras',
    'custo%falar%ouvidoria_Regex_5_Palavras',
    'ouvidoria%nao%consegu%contato_Regex_5_Palavras',
    'ouvidoria%nao%consegu%loga_Regex_5_Palavras',
    'ouvidoria%nao%consigo%loga_Regex_5_Palavras',
    'tent%ouvidoria%nao%consig_Regex_5_Palavras',
    'ouvidoria%ligação%cai_Regex_5_Palavras',
    'minutos%aguardando%ouvidoria_Regex_5_Palavras',
    'ouvidoria%ninguem%atende_Regex_5_Palavras',
    'ouvidoria%nao%atend_Regex_5_Palavras',
    'ouvidoria%nao%me%atend_Regex_5_Palavras',
    'ouvidoria%nao%sou%atend_Regex_5_Palavras',
    'ouvidoria%nao%reconhece%chamado_Regex_5_Palavras',
    'ouvidoria%nao%funciona_Regex_5_Palavras',
    'tentei%registrar%ouvidoria_Regex_5_Palavras',
    'tentei%ouvidoria%nao%fui%atend_Regex_5_Palavras',
    'tentei%ouvidoria%nao%conseg_Regex_5_Palavras',
    'tentei%ouvidoria%nao%atend_Regex_5_Palavras'
]

Here's what I tried to do:

zip_regex_lists = zip(lista_regex_5_nome_colunas, lista_regex_5_palavras_extract)

for x, y in zip_regex_lists:
    df[x] = df['RegistroDescricao_df'].str.extract(y)

But it gives me this error:

ValueError: Wrong number of items passed 4, placement implies 1

Even when I tried this:

for x in lista_regex_5_palavras_extract:
    df[x] = df['RegistroDescricao_df'].str.extract(x)

I'm still getting the exact same error.

What am I doing wrong? How can I achieve what I want?

Laila Campos
  • 801
  • 1
  • 8
  • 21

1 Answers1

-1

df[x] expects a single pd.Series or list to be added to the dataframe as a column. The error suggests that you are trying to put 4 items into df[x] when it needs only 1.

Trying setting expand = False. As per the docs, if there is only one capture group, it will return a Series - which is what df[x] expects.

for x, y in zip_regex_lists:
    df[x] = df['RegistroDescricao_df'].str.extract(y,expand=False)