Como posso filtrar quais linhas de um CSV devem ser carregadas na memória usando o pandas? Esta parece ser uma opção que devemos encontrar read_csv
. Estou esquecendo de algo?
Exemplo: temos um CSV com uma coluna de carimbo de data / hora e gostaríamos de carregar apenas as linhas com um carimbo de data / hora maior que uma determinada constante.
chunk['filed']>constant
posso imprensá-lo entre 2 valores constantes? Ex .: constant1> chunk ['field']> constant2. Ou posso usar 'dentro do alcance'?chunk[(chunk['field'] > constant2)&(chunk['field']<constant1)]
.loc
?chunk.loc[chunk['field'] > constant]
.loc
. Acho que não.loc
existia em 2012, mas acho que hoje em dia o uso.loc
é um pouco mais explícito.Não encontrei uma maneira direta de fazer isso dentro do contexto de
read_csv
. No entanto,read_csv
retorna um DataFrame, que pode ser filtrado selecionando linhas por vetor booleanodf[bool_vec]
:Isso é selecionar todas as linhas em df (assumindo que df seja qualquer DataFrame, como o resultado de uma
read_csv
chamada, que contém pelo menos uma coluna datetimetimestamp
) para os quais os valores natimestamp
coluna são maiores que o valor de targettime. Pergunta semelhante .fonte
Se o intervalo filtrado for contíguo (como geralmente é com os filtros de tempo (carimbo)), a solução mais rápida é codificar o intervalo de linhas. Simplesmente combine
skiprows=range(1, start_row)
comnrows=end_row
parâmetros. Em seguida, a importação leva segundos, enquanto a solução aceita levaria minutos. Alguns experimentos com o inicialstart_row
não representam um custo enorme, dada a economia no tempo de importação. Observe que mantivemos a linha do cabeçalho usandorange(1,..)
.fonte
Se você estiver no Linux, você pode usar grep.
fonte
Você pode especificar o
nrows
parâmetro.import pandas as pd df = pd.read_csv('file.csv', nrows=100)
Este código funciona bem na versão 0.20.3.
fonte