1
resposta

Fatiando String e retornando ela no DF

Boa tarde a todos.

Tenho uns arquivos em Excel, onde tenho que concatenar eles (fazer isso eu consegui), mas eu preciso tirar titulo do arquivo uma string e colocar ela em uma nova coluna, para identificar que aqueles dados são de tal arquivo quando estiverem concatenado.

segue meu codigo:

ocorrencias = glob.glob(r'C:\Users\thiago.mussolini\Desktop\Ocorrencias Tarsila\*.xlsx')
ocorrencias

que me retorna esta lista:

['C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L01_AUTOBAN_2021_Q1.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L01_AUTOBAN_2021_Q2.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L03_TEBE_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L07_ROTA DAS BANDEIRAS_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L09_TRIÂNGULO DO SOL_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L11_RENOVIAS_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L12_VIAOESTE_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L13_COLINAS_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L16_CART_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L19_VIARONDON_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L20_SPVIAS_2021_ANO.xlsx']

aqui eu concateno:

df_ocorrencias = []
for oc in ocorrencias:
    print("Planilha: ", oc)
    extensao = oc.rsplit('.')[-1]
    print("Arquivo: ", extensao)
    df = pd.read_excel(oc)
    df_ocorrencias.append(df)

eu queria criar essa nova coluna no arquivo e inserir os titulos por exemplo: L01_autoban, em cada linha de dado daquele arquivo.

Obrigado pelo tempo.

1 resposta

Olá Thiago, tudo bem? Espero que sim!

O primeiro passo é construir um código para extrair o título da planilha. Podemos extrair essa informação através do código:

titulo = oc.split('C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\')[-1].split('.xlsx')[0]
print("Título da planilha: ", titulo)

Como os nomes L01_AUTOBAN_2021_Q1 e L01_AUTOBAN_2021_Q2 são iguais com exceção do Q1 e Q2, no momento da separação do título mantive o ano 2021 para todos os nomes.

Para colocar o nome do título em cada uma das linhas, basta adicionar uma coluna no seu DataFrame atribuindo a uma variável responsável por armazenar o nome do título da planilha. Além disso, não criei uma lista de DataFrames e sim adicionei os dados em um grande DataFrame, um após o outro. Segue abaixo o código completo:

import pandas as pd

ocorrencias = ['C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L01_AUTOBAN_2021_Q1.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L01_AUTOBAN_2021_Q2.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L03_TEBE_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L07_ROTA DAS BANDEIRAS_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L09_TRIÂNGULO DO SOL_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L11_RENOVIAS_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L12_VIAOESTE_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L13_COLINAS_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L16_CART_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L19_VIARONDON_2021_ANO.xlsx',
 'C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\L20_SPVIAS_2021_ANO.xlsx']

dados = [['João', 10], ['Afonso', 15], ['Bruno', 14]]

df_ocorrencias = pd.DataFrame([])

for oc in ocorrencias:
    titulo = oc.split('C:\\Users\\thiago.mussolini\\Desktop\\Ocorrencias Tarsila\\')[-1].split('.xlsx')[0]
    extensao = oc.rsplit('.')[-1]
    df = pd.DataFrame(dados, columns = ['Nome', 'Idade'])
    df['Titulo'] = titulo
    df_ocorrencias = df_ocorrencias.append(df)

df_ocorrencias.reset_index(drop=True).head()

Que retorna como resultado:

NomeIdadeTitulo
0João10L01_AUTOBAN_2021_Q1
1Afonso15L01_AUTOBAN_2021_Q1
2Bruno14L01_AUTOBAN_2021_Q1
3João10L01_AUTOBAN_2021_Q2
4Afonso15L01_AUTOBAN_2021_Q2

Como não tive acesso aos dados, utilizei nomes de exemplo, mas basta substituir a linha df = pd.DataFrame(dados, columns = ['Nome', 'Idade']) pela leitura dos dados das planilhas com a função pd.read_excel(), dentro do bloco for.

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!