1
resposta

Como faço para gerar um CSV colocando colunas no Dataframe (Pandas - Python - WebScraping)

O CSV gerado ficou da seguinte forma:

value;name;category;motor;description;location;items R$ 338.000;LAMBORGHINI AVENTADOR;USADO;Motor 1.8 16v;Ano 1993 - 55.286 km;Belo Horizonte - MG;['4 X 4', 'Câmera de estacionamento', 'Controle de tração', 'Sensor de estacionamento']

Mas quero que a saída (em CSV) fique da seguinte forma:

value;name;category;motor;description;location;items_4x4, items_camera, items_tracao, items_sensor "R$ 338.000";"LAMBORGHINI AVENTADOR";"USADO";"Motor 1.8 16v";"Ano 1993 - 55.286 km";"Belo Horizonte - MG";"4 X 4"; "Câmera de estacionamento"; "Controle de tração"; "Sensor de estacionamento"

Como faço para colocar aspas duplas entre os elementos e descer o nível para transformar a lista de itens em colunas?

Obs: Foi gerado com o DataFrame do Pandas. vide o código abaixo:

acessorios = []
    for item in items:
        acessorios.append(item.getText().replace('► ', ''))
    card['items'] = acessorios


    # 4 - Criando um DataFrame com os dados coletados do primeiro card
    dataset = pd.DataFrame.from_dict(card, orient = 'index').T # Imprime em formato de linha (index: 0, 1 , 2, etc). Para transformar as linhas em colunas (como uma tabela), coloque o '.T' (Transpor: Transforma o que é linha em coluna)

    #Dúvida... como criar items = ['item 1', 'item 2'] em colunas e como colocar aspas duplas(") para os valores ?
    dataset.to_csv('./output/data/dataset.csv', sep = ';', index = False, encoding = 'utf-8-sig')

Curso: Scraping com Python: Coleta de dados na Web - Aula 5: capturando dados do anúncio.

1 resposta

Oi Rodrigo, como vai?

Peço perdão pela demora em obter um retorno.

Nesse caso, a alternativa é organizar os dados já existentes para a forma como você deseja obter a saída, fazendo manipulações na lista de cards já existente. Veja:

novo_dicionario = {}
nova_lista = []

for chave, valor in card.items():
    if isinstance(valor, list): # se for uma lista, irá percorrer a lista e colocar aspas duplas em cada elemento dela
       for item in valor:
            nova_lista.append('"' + item + '"')
    else:
        novo_dicionario[chave] = '"' + valor + '"' # colocando o elemento no dicionário com aspas duplas

# separando a lista de acordo com o nome da coluna
novo_dicionario['items_4x4'] = nova_lista[0]
novo_dicionario['items_camera'] = nova_lista[1]
novo_dicionario['items_tracao'] = nova_lista[2]
novo_dicionario['items_sensor '] = nova_lista[3]

# montando o dataset
dataset_teste = pd.DataFrame.from_dict(novo_dicionario, orient = 'index').T
dataset_teste


dataset_teste.to_csv('./output/data/dataset_teste.csv', sep=';', index = False, encoding = 'utf-8-sig')

Resultado:

image

Outra opção é utilizar o argumento quoting, porém, ele colocará aspas até mesmo nos nomes das colunas:

novo_dicionario = {}
nova_lista = []

for chave, valor in card.items():
    if isinstance(valor, list): 
       for item in valor:
            nova_lista.append(item)
    else:
        novo_dicionario[chave] = valor

# separando a lista de acordo com o nome da coluna
novo_dicionario['items_4x4'] = nova_lista[0]
novo_dicionario['items_camera'] = nova_lista[1]
novo_dicionario['items_tracao'] = nova_lista[2]
novo_dicionario['items_sensor '] = nova_lista[3]

# montando o dataset
dataset_teste = pd.DataFrame.from_dict(novo_dicionario, orient = 'index').T
dataset_teste


print(dataset_teste.to_csv(sep=';', index = False, quoting=csv.QUOTE_NONNUMERIC, encoding = 'utf-8-sig'))
dataset_teste.to_csv('param.csv', sep=';', index = False, quoting=csv.QUOTE_NONNUMERIC, encoding = 'utf-8-sig')

Resultado:

image

Qualquer dúvida é só dizer.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software