回答:
日付列がインデックスの場合、ラベルベースのインデックスには.locを使用し、位置インデックスには.ilocを使用します。
例えば:
df.loc['2014-01-01':'2014-02-01']
詳細はこちらhttp://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection
列がインデックスでない場合は、2つの選択肢があります。
df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
参照してくださいここで、一般的な説明については、
注:.ixは非推奨です。
query
こちらでもご利用いただけます。df.query('20130101 < date < 20130201')
。
.loc
と.ix
)と列のフィルターは同等ではないことを言及する必要があります。df.ix['2014-01-01':'2014-02-01']
含まれて2014-02-01
いるdf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
が含まれていない場合は2013-02-01
、までの行にのみ一致します2013-01-31
。
以前の答えは私の経験では正しくありません。単純な文字列を渡すことはできません。日時オブジェクトである必要があります。そう:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
また、datetimeパッケージをインポートすることで日付が標準化されている場合は、次のように使用できます。
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
datetimeパッケージを使用して日付文字列を標準化するには、次の関数を使用できます。
import datetime
datetime.datetime.strptime
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
。
日時列にPandas日時タイプ(例:)が含まれている場合、datetime64[ns]
適切にフィルタリングするには、次のようにpd.Timestampオブジェクトが必要です。
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]
pd.Timestampを使用してクエリとローカル参照を実行できます
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")')
出力付き
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のパンダのドキュメント、特にローカル変数参照参照の@
接頭辞に関する言及をご覧ください。この場合pd.Timestamp
、ローカルエイリアスts
を使用して参照し、タイムスタンプ文字列を提供できるようにします。
そのため、csvデータファイルをロードするときは、日付の範囲に基づいてデータをフィルター処理するために、以下のように日付列をインデックスとして設定する必要があります。これは、現在非推奨のメソッドであるpd.DataFrame.from_csv()では必要ありませんでした。
1月から2月までの2か月のデータ(例:2020-01-01から2020-02-29)のみを表示する場合は、次のようにできます。
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']
これは、Python 3.7で動作することがテストされています。これがお役に立てば幸いです。
index_col
string
リストではない必要があります。mydata = pd.read_csv('mydata.csv',index_col='date')
日付でデータフレームをフィルターする最も簡単な方法:日付列がdatetime64 [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']
次のようにして時間範囲を選択することができます:df.loc ['start_date': 'end_date']