Yanıtlar:
Eğer tarih sütunu endeksidir , daha sonra pozisyonel endeksleme için etiket bazlı endeksleme veya .iloc için .loc kullanın.
Örneğin:
df.loc['2014-01-01':'2014-02-01']
Ayrıntıları buradan görebilirsiniz http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection
Sütun dizin değilse iki seçeneğiniz vardır:
df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
Genel açıklama için buraya bakın
Not: .ix kullanımdan kaldırılmıştır.
query
Burada da kullanabilirsiniz . df.query('20130101 < date < 20130201')
.
.loc
ve aracılığıyla .ix
) ve sütun filtrelerinin eşdeğer olmadığını belirtmelisiniz. df.ix['2014-01-01':'2014-02-01']
içerir 2014-02-01
, df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
içermez 2013-02-01
, yalnızca en fazla satır eşleşir 2013-01-31
.
Önceki cevap deneyimime göre doğru değil, basit bir dize geçiremezsiniz, datetime nesnesi olması gerekir. Yani:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
Tarihleriniz datetime paketini içe aktararak standartlaştırılmışsa şunları kullanabilirsiniz:
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
Tarih dizenizi datetime paketini standartlaştırmak için şu işlevi kullanabilirsiniz:
import datetime
datetime.datetime.strptime
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.
Datetime sütununuzda Pandas datetime türü (ör. datetime64[ns]
) Varsa , uygun filtreleme için pd.Timestamp nesnesine ihtiyacınız vardır, örneğin:
from datetime import date
import pandas as pd
value_to_check = pd.Timestamp(date.today().year, 1, 1)
filter_mask = df['date_column'] < value_to_check
filtered_df = df[filter_mask]
Tarihler dizinde ise, basitçe:
df['20160101':'20160301']
Bir sorgu ve yerel başvuru gerçekleştirmek için pd.Timestamp komutunu kullanabilirsiniz.
import pandas as pd
import numpy as np
df = pd.DataFrame()
ts = pd.Timestamp
df['date'] = np.array(np.arange(10) + datetime.now().timestamp(), dtype='M8[s]')
print(df)
print(df.query('date > @ts("20190515T071320")')
çıktı ile
date
0 2019-05-15 07:13:16
1 2019-05-15 07:13:17
2 2019-05-15 07:13:18
3 2019-05-15 07:13:19
4 2019-05-15 07:13:20
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25
date
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25
DataFrame.query için panda belgelerine , özellikle yerel değişken udsing @
önekinden bahsedin . Bu durumda , zaman damgası dizesi sağlayabilmek için pd.Timestamp
yerel takma adı kullanmats
Bu nedenle, csv veri dosyasını yüklerken, verilere bir tarih aralığına göre filtre uygulamak için tarih sütununu şimdi aşağıdaki gibi dizin olarak ayarlamamız gerekir. Artık kullanımdan kaldırılan yöntem için buna gerek yoktu: pd.DataFrame.from_csv ().
Verileri yalnızca Ocak ayından Şubat ayına kadar, örneğin 2020-01-01 ila 2020-02-29 arasında göstermek istiyorsanız, bunu yapabilirsiniz:
import pandas as pd
mydata = pd.read_csv('mydata.csv',index_col='date') # or its index number, e.g. index_col=[0]
mydata['2020-01-01':'2020-02-29'] # will pull all the columns
#if just need one column, e.g. Cost, can be done:
mydata['2020-01-01':'2020-02-29','Cost']
Bu Python 3.7 için çalıştığı test edilmiştir. Umarım bunu faydalı bulursun.
index_col
Bir olmak zorunda string
bir liste değil. mydata = pd.read_csv('mydata.csv',index_col='date')
Veri çerçevenizi tarihe göre filtrelemenin en kısa yolu: Tarih sütununuzun datetime64 türü olduğunu varsayalım [ns]
# filter by single day
df = df[df['date'].dt.strftime('%Y-%m-%d') == '2014-01-01']
# filter by single month
df = df[df['date'].dt.strftime('%Y-%m') == '2014-01']
# filter by single year
df = df[df['date'].dt.strftime('%Y') == '2014']
Henüz yorum yazma iznim yok, bu yüzden eğer birisi hepsini okuyacak ve buna ulaşacaksa, bir cevap yazacağım.
Veri kümesinin dizini bir tarihsa ve bunu yalnızca (örneğin) aylara göre filtrelemek istiyorsanız, aşağıdakileri yapabilirsiniz:
df.loc[df.index.month = 3]
Bu, veri kümesini Mart ayına kadar filtreleyecektir.
Dizeyi zaten pd.to_datetime kullanarak bir tarih biçimine dönüştürdüyseniz şunu kullanabilirsiniz:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
Zaman aralığını şu şekilde yapabilirsiniz: df.loc ['start_date': 'end_date']