1
resposta

Usar validate_docbr em uma função para validar GRANDE quantidade de documentos

Bom dia a todos, gostaria de pedir encarecidamente a ajuda de vocês. Estou treinando análise de dados e surgiu um desafio com um grande volume de dados em um arquivo CSV, o dataframe é composto por 1 MILHÃO de linhas e 11 colunas. O desafio é o seguinte: Detectar através da coluna document se o registro é de uma Pessoa Física ou Pessoa Jurídica, adicionando uma coluna com essa informação. Os dados da coluna document já foram tratados por mim e estão homogenizados. Criei a nova coluna solicitada pelo nome de PF OU PJ, e criei a seguinte função:

def validate_doc(doc):
    cpf=CPF()
    cnpj=CNPJ()
    if cpf.validate():
        return doc()
    elif cnpj.validate():
        return doc()
    else:
        return doc

Gostaria de saber como eu faria para implementar os retornos (os retornos teriam que ser PF ou PJ) da função dentro da coluna PF OU PJ.

Estou aplicando a função na coluna porém não me retorna NADA

df['PF OU PJ'] = df['PF OU PJ'].apply(lambda x: validate_doc(x))

A função está correta ? Se sim, como eu faço para retornar se é PF ou PJ dentro da coluna PF OU PJ ? Se não, como eu posso corrigir ?

1 resposta

Eu não conheço o panda e não tenho certeza se vai resolver, mas tenho as seguintes considerações:

Edit: Eu estou na duvida se CPF() e CNPJ() são classes suas para representar documentos CPF ou se é a classe do pacote validate_docbr.

Estou considerando que é do pacote validate_docbr.

def validate_doc(doc):
    cpf=CPF() 
    cnpj=CNPJ()
    if cpf.validate(): # deveria passar doc na função validate()
        return doc() # deveria retornar algo como uma str "PF"
    elif cnpj.validate(): # deveria passar doc na função validate()
        return doc( )# deveria retornar algo como uma str "PJ"
    else:
        return doc # deveria reteornar algo como uma str "Inválido"
# não precisa do lambda, já que a sua função já tem nome
df['PF OU PJ'] = df['PF OU PJ'].apply(lambda x: validate_doc(x)) 

# É o mesmo que (passar a função sem parenteses mesmo)
df['PF OU PJ'] = df['PF OU PJ'].apply(validate_doc)