Como fazer para copiar dados de uma planilha do Excel para outra, sendo que essas planilhas estão no mesmo arquivo do Excel porém em páginas diferentes? Poderia me recomendar alguma aula que fale especificamente sobre isso também.
Como fazer para copiar dados de uma planilha do Excel para outra, sendo que essas planilhas estão no mesmo arquivo do Excel porém em páginas diferentes? Poderia me recomendar alguma aula que fale especificamente sobre isso também.
Oi Leonardo! Tudo bem com você? Espero que sim!
A cópia de dados entre páginas do excel são bem simples de fazer. Para facilitar seu entendimento, vou criar um exemplo aqui com excel para você poder aplicar ao seu projeto, está bem?
Primeiro, é preciso fazer o download de algumas bibliotecas importantes que são utilizadas com o pandas, é possível fazer isso com o pip install:
!pip install xlsxwriter
!pip install xlrd
!pip install openpyxl
O arquivo excel que montei tem o nome demo.xlsx, contém uma página com o nome de Página_1 e uma pequena tabela com dados nela.
Para copiar os dados da Página_1 fazemos a importação do pandas e criamos um DataFrame de leitura:
import pandas as pd
arquivo = 'demo.xlsx'
df_read = pd.read_excel(arquivo,sheet_name='Página_1')
Depois, importamos o método load_workbook
da biblioteca openpyxl
que vai permitir salvarmos o excel em um Workbook e assim não apagá-lo quando fizermos a cópia. Após o import, salvamos o Workbook e ativamos um comando de escrita do excel utilizando a ferramenta openpyxl
:
from openpyxl import load_workbook
book = load_workbook(arquivo)
writer = pd.ExcelWriter(arquivo, engine='openpyxl')
writer.book = book
O writer
permite editar e criar novas páginas no excel, mas sem o load_workbook
a edição do excel não seria possível, pois todo o arquivo seria substituído pela nova edição.
O último passo foi copiar o DataFrame df_read
e criar a nova página no documento excel. A nova página foi nomeada como Página_2 e foi desabilitado os números de indexação no excel com index = False
.
df_copia = df_read.copy()
df_copia.to_excel(writer, sheet_name='Página_2', index=False)
writer.save()
writer.close()
Os comandos writer.save()
e writer.close()
são muito importantes de existirem no final do código para não gerar erros no seu arquivo no final da execução. Além disso, é necessário que o arquivo esteja fechado/fora de uso no momento da execução do código para que funcione corretamente.
Vou deixar aqui também o artigo intitulado Using Python Pandas With Excel Sheet que explica várias formas de trabalhar com arquivo excel com o pandas como criar um arquivo excel, escrever algo nele e como acrescentar dados, outro artigo que acho interessante a leitura é o Add new sheet to excel using pandas que explica bem objetivamente como inserir uma nova página em um arquivo excel existente. OBS: Infelizmente os artigos estão em inglês, então, caso tenha dificuldade em relação a este idioma, indico que tente utilizar o tradutor do navegador, para conseguir efetuar a leitura em português, mas qualquer dúvida ou dificuldade estarei à disposição
Eu espero ter te ajudado! Se surgir outra dúvida estarei à disposição.
Bons estudos!
Olá, muito obrigada! Já ajudou bastante!! Porém ainda não consegui resolver 100% do problema aqui, poderia me ajudar novamente? Por que o que eu preciso é copiar uma coluna especifica de uma aba (ex.: coluna A da Página1) e colar numa outra coluna e aba - já existente - especifica (ex.: coluna M da Página2). Para a primeira parte, eu até consegui, junto com o que você disse e adicionando o usecols = "A", assim: df_read = pd.read_excel(arquivo,sheet_name='Página_1', usecols= "A"). Porém ao colar, ele não está copiando para a aba já existente (está criando outra) e também não sei como selecionar em qual coluna deverá será colado as informações nessa aba.Além disso, poderia explicar como fazer isso para arquivos diferentes e não só abas diferentes.
Oi Leonardo! Tudo bem?
Que bom que a resposta anterior foi útil de alguma forma, fico muito feliz!
Não imaginei que seria uma coluna só, peço desculpas pelo mal entendido. Uma sugestão para as demais dúvidas que forem apresentadas aqui no fórum é você detalhar bem o problema e explicar o que você precisa para que assim você possa ser ajudado da melhor forma possível ^^
Existe também uma forma de apenas alterar uma página já existente em um arquivo excel com Python, e não muda muito do código apresentado na resposta anterior, somente teremos que adicionar alguns comandos. Então, vou fazer quase a mesma coisa que fiz na explicação anterior: vou montar um exemplo que você pode adaptar para a realidade do seu projeto, beleza?
Nesse exemplo, quero passar a coluna C presente na Página_1 do meu arquivo demo no excel para a Página_2 desse mesmo arquivo apenas adicionando essa coluna a um conjunto de dados já existente. Para fazer isso, podemos primeiro importar o pandas e ler a coluna que desejamos transferir do arquivo excel que chamei de coluna_adicionar
:
import pandas as pd
arquivo = 'demo.xlsx'
coluna_adicionar = pd.read_excel(arquivo, sheet_name = 'Página_1', usecols=('C'))
Depois devemos salvar em uma variável o DataFrame já existente na segunda aba (Página_2) e concatenar/unir o dataframe existente com a coluna que desejamos, para isso utilizamos o método pd.concat do Pandas:
df_somar_coluna = pd.read_excel(arquivo, sheet_name = 'Página_2')
df = pd.concat([df_somar_coluna,coluna_adicionar], axis = 1)
A partir daqui não vai ter uma diferença muito grande da que foi mostrada na resposta anterior, utilizaremos o método load_workbook
para salvar o excel em um Workbook:
from openpyxl import load_workbook
book = load_workbook(arquivo)
writer = pd.ExcelWriter(arquivo, engine = 'openpyxl')
writer.book = book
Aqui a diferença vai ser que iremos adicionar o writer.sheets
para acessar as páginas presentes no excel e poder editá-las sem que sejam criadas novas abas, definindo um dicionário com todas as páginas presentes no excel. Depois é só substituir o arquivo da mesma forma como foi feita na resposta anterior e teremos a coluna adicionada no arquivo excel.
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, sheet_name='Página_2')
writer.save()
writer.close()
Para fazer isso com outro arquivo, você pode seguir os mesmos passos de definição de DataFrame, mas se atentando a coletar os dados do 2° arquivo para concatenar. Além disso, na parte em que começamos a trabalhar com o openpyxl
, você precisa trabalhar com 2° arquivo para ser editado, conforme a seguinte estrutura:
import pandas as pd
arquivo1 = 'demo.xlsx' # 1° arquivo
arquivo2 = 'demo_2.xlsx' # 2° arquivo
# Coletar a coluna do 1° arquivo
coluna_adicionar = pd.read_excel(arquivo1, sheet_name = 'Página_1', usecols=('C'))
# Coletar os dados da Página_2 do 2° arquivo para fazer a concatenação/união
df_somar_coluna = pd.read_excel(arquivo2, sheet_name = 'Página_2')
df = pd.concat([df_somar_coluna,coluna_adicionar], axis = 1)
from openpyxl import load_workbook
# o livro criado será referente ao 2° arquivo pois ele é quem será editado
book = load_workbook(arquivo2)
writer = pd.ExcelWriter(arquivo2, engine = 'openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, sheet_name='Página_2')
writer.save()
writer.close()
Lembrando que é necessário que o arquivo esteja fechado/fora de uso no momento da execução do código para que funcione corretamente e os comandos writer.save()
e writer.close()
não podem ser esquecidos após terminada a edição.
Eu espero que tenha ficado mais claro, e que esse exemplo tenha ajudado mais com seu projeto! Infelizmente não temos conteúdo de curso que fale sobre isso, então qualquer dúvida pode chamar aqui que estarei à disposição.
Bons estudos!