Pular linhas durante a importação csv dos pandas

97

Estou tentando importar um arquivo .csv usando pandas.read_csv(), mas não quero importar a 2ª linha do arquivo de dados (a linha com índice = 1 para indexação 0).

Não consigo ver como não importá-lo porque os argumentos usados ​​com o comando parecem ambíguos:

Do site do pandas:

skiprows : semelhante a uma lista ou inteiro

Números de linhas a pular (indexados em 0) ou número de linhas a pular (int) no início do arquivo. "

Se eu inserir skiprows=1os argumentos, como ele saberá se deve ignorar a primeira linha ou a linha com índice 1?

Thosphor
fonte
2
Eu acho que, como afirma, pode ser "semelhante a uma lista ou inteiro" e, em seguida, oferece duas opções (pular linhas ou pular # linhas no início), se você fornecer a lista [1], ela simplesmente pulará a linha 1 (2ª linha). Se você tivesse fornecido um número inteiro (por exemplo 10), ele ignoraria as primeiras 10 linhas.
Ffisegydd
1
Ótimo que funcionou. Muito obrigado. Apenas me perguntei como ele diferenciaria entre o índice e o int. [] é a resposta.
thosphor

Respostas:

144

Você pode tentar:

>>> import pandas as pd
>>> from StringIO import StringIO
>>> s = """1, 2
... 3, 4
... 5, 6"""
>>> pd.read_csv(StringIO(s), skiprows=[1], header=None)
   0  1
0  1  2
1  5  6
>>> pd.read_csv(StringIO(s), skiprows=1, header=None)
   0  1
0  3  4
1  5  6
Alko
fonte
Sim, obrigado, eu só precisava saber que o índice foi especificado entre colchetes [].
thosphor
11
em Python 3: from io import StringIO
Dima Lituiev
^ Não há necessidade de importar, é diretamente acessível como pd.compat.StringIO .
cs95 de
30

Não tenho reputação para comentar ainda, mas quero adicionar a alko resposta para referência futura.

Dos documentos :

skiprows: uma coleção de números para as linhas do arquivo pular. Também pode ser um número inteiro para pular as primeiras n linhas

Hugo
fonte
14

Tive o mesmo problema ao executar o skiprows ao ler o arquivo csv. Eu estava doando skip_rows = 1 isso não vai funcionar

Um exemplo simples dá uma ideia de como usar o skiprows ao ler o arquivo csv.

import pandas as pd

#skiprows=1 will skip first line and try to read from second line
df = pd.read_csv('my_csv_file.csv', skiprows=1)  ## pandas as pd

#print the data frame
df
Viraj Wadate
fonte
1

Todas essas respostas perdem um ponto importante - a enésima linha é a enésima linha no arquivo, e não a enésima linha no conjunto de dados. Tenho uma situação em que faço o download de alguns dados antiquados de medidores de fluxo do USGS. O cabeçalho do conjunto de dados é comentado com '#', a primeira linha depois disso são os rótulos, a seguir vem uma linha que descreve os tipos de data e, por último, os próprios dados. Nunca sei quantas linhas de comentário existem, mas sei quais são as primeiras linhas. Exemplo:

----------------------------- AVISO -------------------- --------------

Alguns dos dados que você obteve deste banco de dados do US Geological Survey

pode não ter recebido a aprovação do Diretor. ... agency_cd site_no datetime tz_cd 139719_00065 139719_00065_cd

5s 15s 20d 6s 14n 10s USGS 08041780 06-05-2018 00:00 CDT 1,98 A

Seria bom se houvesse uma maneira de pular automaticamente a enésima linha, bem como a enésima linha.

Como observação, consegui corrigir meu problema com:

import pandas as pd
ds = pd.read_csv(fname, comment='#', sep='\t', header=0, parse_dates=True)
ds.drop(0, inplace=True)
EBo
fonte
-1

skip[1] irá pular a segunda linha, não a primeira.

pernilongo
fonte
-8

Certifique-se também de que o seu arquivo seja realmente um arquivo CSV. Por exemplo, se você tinha um arquivo .xls e simplesmente alterou a extensão do arquivo para .csv, o arquivo não será importado e apresentará o erro acima. Para verificar se este é o seu problema, abra o arquivo no excel e provavelmente dirá:

"O formato do arquivo e a extensão de 'Filename.csv' não correspondem. O arquivo pode estar corrompido ou não é seguro. A menos que você confie na fonte, não o abra. Deseja abri-lo mesmo assim?"

Para corrigir o arquivo: abra o arquivo no Excel, clique em "Salvar como", escolha o formato de arquivo para salvar (use .cvs) e substitua o arquivo existente.

Este era o meu problema e corrigiu o erro para mim.

Justin R. Locke
fonte
9
Este pode ter sido o seu problema, mas não tem nada a ver com a pergunta nem tenta respondê-la. Simplesmente explica algum outro problema adicional que você teve. Você também pode dizer "lembre-se também de carregar seu laptop, o meu não tinha bateria e perdi todas as minhas alterações. Esse foi o meu problema"
JC Rocamonde