Como adicionar linha de cabeçalho a um DataFrame do pandas

165

Estou lendo um arquivo csv pandas. Esse arquivo csv consiste em quatro colunas e algumas linhas, mas não possui uma linha de cabeçalho, que eu quero adicionar. Eu tenho tentado o seguinte:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Mas quando aplico o código, recebo o seguinte erro:

ValueError: Shape of passed values is (1, 1), indices imply (4, 1)

O que exatamente significa o erro? E qual seria uma maneira limpa em python para adicionar uma linha de cabeçalho ao meu arquivo csv / pandas df?

sequence_hard
fonte
Aqui está uma interpretação diferente da sua pergunta: Adicione outro cabeçalho a um Dataframe existente para criar um MultiIndex.
cs95 24/05/19

Respostas:

257

Você pode usar namesdiretamente noread_csv

names: tipo matriz, padrão Nenhum Lista de nomes de colunas a serem usados. Se o arquivo não contiver nenhuma linha de cabeçalho, você deverá passar explicitamente o cabeçalho = Nenhum

Cov = pd.read_csv("path/to/file.txt", 
                  sep='\t', 
                  names=["Sequence", "Start", "End", "Coverage"])
Leb
fonte
9
Você vai rir. Na verdade, eu tentei isso, mas não sabia que era preciso colocar colchetes entre os nomes. O que é logicamente em retrospecto. Obrigado!
sequence_hard
Não se preocupe, todos nós cometemos esses erros tolos. Eu também sou culpado deles.
Leb
@ Leb, eu tive exatamente o mesmo problema e tentei sua solução. Obtive os cabeçalhos da tabela, mas a primeira linha também foi substituída pelos mesmos nomes de cabeçalho. O que eu faço agora?
007mrviper 13/11/2018
adiciona mais colunas aos meus dados, todos com NaNatributos. Foi porque meu separador é um espaço vazio.
SalahAdDin 23/01
127

Como alternativa, você pode ler seu csv header=Nonee adicioná-lo com df.columns:

Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
Cov.columns = ["Sequence", "Start", "End", "Coverage"]
Anton Protopopov
fonte
15
col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

tendo feito isso, basta verificar com [bem, obviamente, eu sei, você sabe disso. Mas ainda...

my_CSV_File.head()

Espero que ajude ... Cheers

Bhardwaj Joshi
fonte
Formate seu código com o {}botão O recuo é importante.
Sr. T
7

Para corrigir seu código, você pode simplesmente mudar [Cov]para Cov.values, o primeiro parâmetro de pd.DataFramese tornará uma numpymatriz multidimensional :

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame(Cov.values, columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Mas a solução mais inteligente ainda é usada pd.read_excelcom header=Nonee names=columns_list.

romulomadu
fonte
Quando fornecemos column_list, podemos adicionar valores padrão para as colunas selecionadas?
Chintan Gotecha