Pandas Apêndice ao CSV
Python Pandas permite-nos manipular e gerir os dados de forma eficiente. Podemos criar e gerir DataFrames e realizar várias operações sobre os mesmos. Também nos permite ler um ficheiro CSV ou Excel externo, importar DataFrames, trabalhar neles, e guardá-los de volta. Uma característica interessante em guardar dados é o modo append
, utilizando o parâmetro a
, que pode ser utilizado para anexar dados a um ficheiro CSV já existente.
Este artigo irá introduzir como anexar dados ao CSV utilizando Pandas.
import pandas as pd
df = pd.DataFrame([[6, 7, 8], [9, 12, 14], [8, 10, 6]], columns=["a", "b", "c"])
print(df)
df.to_csv(r"C:\Test\data.csv", index=False)
df2 = pd.DataFrame([[4, 1, 3], [6, 7, 2], [5, 9, 4]], columns=["a", "b", "c"])
print(df2)
df2.to_csv(r"C:\Test\data.csv", mode="a", header=False, index=False)
Resultado:
a b c
0 6 7 8
1 9 12 14
2 8 10 6
a b c
0 4 1 3
1 6 7 2
2 5 9 4
O ficheiro CSV guardado terá ambos os DataFrames com os dados do df2
anexados ao ficheiro original.
Há também outra funcionalidade adicional que podemos acrescentar a este código. Com apenas algumas linhas de código, podemos assegurar que a função to_csv()
irá criar um ficheiro se este não existir e saltar cabeçalhos se este já existir. Utilizaremos a declaração with
para o tratamento de excepções e open()
para abrir um ficheiro.
import pandas as pd
df = pd.DataFrame([[6, 7, 8], [9, 12, 14], [8, 10, 6]], columns=["a", "b", "c"])
print(df)
df.to_csv(r"C:\Test\data.csv", index=False)
df2 = pd.DataFrame([[4, 1, 3], [6, 7, 2], [5, 9, 4]], columns=["a", "b", "c"])
print(df2)
with open(r"C:\Test\data.csv", mode="a") as f:
df2.to_csv(f, header=f.tell() == 0, index=False)
Resultado:
a b c
0 6 7 8
1 9 12 14
2 8 10 6
a b c
0 4 1 3
1 6 7 2
2 5 9 4
O método tell()
do objecto de ficheiro retorna a posição actual do cursor. Portanto, se o ficheiro estiver vazio ou não existir, f.tell==0
é Verdadeiro, de modo que header
está definido para True
; caso contrário, header
está definido para False
.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn