Mam Pandas DataFrame z kolumną „data”. Teraz muszę odfiltrować wszystkie wiersze w DataFrame, które mają daty spoza najbliższych dwóch miesięcy. Zasadniczo muszę zachować tylko te wiersze, które są w ciągu najbliższych dwóch miesięcy.
Jaki jest najlepszy sposób, aby to osiągnąć?
query
tutaj.df.query('20130101 < date < 20130201')
..loc
i.ix
) oraz kolumny w przykładach nie są równoważne.df.ix['2014-01-01':'2014-02-01']
obejmuje,2014-02-01
podczas gdydf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
nie obejmuje2013-02-01
, będzie dopasowywać tylko wiersze do2013-01-31
.Z mojego doświadczenia wynika, że poprzednia odpowiedź nie jest poprawna, nie można przekazać jej prostego ciągu, musi to być obiekt typu data-godzina. Więc:
źródło
A jeśli twoje daty są ustandaryzowane poprzez import pakietu datetime, możesz po prostu użyć:
Aby ustandaryzować ciąg daty za pomocą pakietu datetime, możesz użyć tej funkcji:
źródło
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Jeśli twoja kolumna datetime ma typ Pandas datetime (np.
datetime64[ns]
), Do prawidłowego filtrowania potrzebujesz obiektu pd.Timestamp , na przykład:źródło
Jeśli daty znajdują się w indeksie, po prostu:
źródło
Możesz użyć pd.Timestamp do wykonania zapytania i lokalnego odniesienia
z wyjściem
Zapoznaj się z dokumentacją pand dla DataFrame.query , w szczególności wzmianką o lokalnym
@
prefiksie udsing, do którego odwołuje się zmienna zmienna . W tym przypadku odwołujemy siępd.Timestamp
do lokalnego aliasu,ts
aby móc podać ciąg znacznika czasuźródło
Więc podczas ładowania pliku danych csv będziemy musieli ustawić kolumnę daty jako indeks teraz, jak poniżej, aby filtrować dane na podstawie zakresu dat. Nie było to potrzebne w przypadku przestarzałej metody: pd.DataFrame.from_csv ().
Jeśli chcesz tylko pokazać dane za dwa miesiące od stycznia do lutego, np. 01.01.2020 do 29.02.2020, możesz to zrobić:
Zostało to przetestowane pod kątem Pythona 3.7. Mam nadzieję, że okaże się to przydatne.
źródło
index_col
musi byćstring
nie listą.mydata = pd.read_csv('mydata.csv',index_col='date')
Co powiesz na używanie
pyjanitor
Ma fajne funkcje.
Po
pip install pyjanitor
źródło
Najkrótszy sposób filtrowania ramki danych według daty: załóżmy, że kolumna z datą to typ datetime64 [ns]
źródło
Nie mogę jeszcze pisać żadnych komentarzy, więc napiszę odpowiedź, jeśli ktoś przeczyta je wszystkie i dotrze do tego.
Jeśli indeks zbioru danych to data i godzina i chcesz przefiltrować go tylko według (na przykład) miesięcy, możesz wykonać następujące czynności:
Spowoduje to przefiltrowanie zbioru danych do marca.
źródło
Jeśli już przekonwertowałeś ciąg na format daty za pomocą pd.to_datetime, możesz po prostu użyć:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
źródło
Możesz po prostu wybrać zakres czasu, wykonując: df.loc ['start_date': 'end_date']
źródło