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

pandas anexar a csv.png

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.