Eu tenho um DataFrame do Pandas com uma coluna 'date'. Agora eu preciso filtrar todas as linhas no DataFrame que tenham datas fora dos próximos dois meses. Essencialmente, só preciso reter as linhas que estão dentro dos próximos dois meses.
Qual a melhor maneira de alcançar isto?
query
aqui também.df.query('20130101 < date < 20130201')
..loc
e.ix
) e colunas em seus exemplos não são equivalentes.df.ix['2014-01-01':'2014-02-01']
inclui2014-02-01
whiledf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
não inclui2013-02-01
, ele corresponderá apenas às linhas até2013-01-31
.Resposta anterior não está correta na minha experiência, você não pode passar uma string simples, precisa ser um objeto datetime. Assim:
fonte
E se suas datas forem padronizadas importando o pacote datetime, você pode simplesmente usar:
Para padronizar sua sequência de datas usando o pacote datetime, você pode usar esta função:
fonte
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Se sua coluna datetime tiver o tipo de data e hora do Pandas (por exemplo
datetime64[ns]
), para uma filtragem adequada, você precisará do objeto pd.Timestamp , por exemplo:fonte
Se as datas estiverem no índice, simplesmente:
fonte
Você pode usar o pd.Timestamp para executar uma consulta e uma referência local
com a saída
Dê uma olhada na documentação do DataFrame.query do pandas , especificamente na menção sobre o
@
prefixo de udsing referenciado por variáveis locais . Nesse caso, fazemos referência aopd.Timestamp
uso do alias localts
para poder fornecer uma string de carimbo de data / horafonte
Portanto, ao carregar o arquivo de dados csv, precisaremos definir a coluna da data como índice agora como abaixo, para filtrar os dados com base em um intervalo de datas. Isso não era necessário para o método agora descontinuado: pd.DataFrame.from_csv ().
Se você deseja apenas mostrar os dados por dois meses de janeiro a fevereiro, por exemplo, 2020-01-01 a 2020-02-29, é possível:
Isso foi testado para o Python 3.7. Espero que você ache isso útil.
fonte
index_col
tem que serstring
uma lista não.mydata = pd.read_csv('mydata.csv',index_col='date')
Que tal usar
pyjanitor
Possui recursos interessantes.
Depois de
pip install pyjanitor
fonte
A maneira mais curta de filtrar seu quadro de dados por data: suponha que sua coluna de data seja do tipo datetime64 [ns]
fonte
Ainda não tenho permissão para escrever comentários, por isso vou escrever uma resposta, se alguém ler todos eles e chegar a esse.
Se o índice do conjunto de dados for um datetime e você desejar filtrá-lo apenas por (por exemplo) meses, poderá fazer o seguinte:
Isso filtrará o conjunto de dados para você em março.
fonte
Se você já converteu a string para um formato de data usando pd.to_datetime, basta usar:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
fonte
Você pode selecionar o intervalo de tempo fazendo: df.loc ['start_date': 'end_date']
fonte