「日付」列を含むPandas DataFrameがあります。今、私は次の2ヶ月の外側の日付を持つDataFrame内のすべての行を除外する必要があります。基本的に、私は今後2ヶ月以内にある行を保持する必要があるだけです。
これを達成するための最良の方法は何ですか?
日付列がインデックスの場合は、ラベルベースのインデックス作成には.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は非推奨です。
以前の答えは私の経験では正しくありません、あなたはそれに単純な文字列を渡すことはできません、日時オブジェクトである必要があります。そう:
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
もしあなたのdatetimeカラムがPandasのdatetimeタイプ(例えば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]
日付がインデックスにある場合は、単純に次のようにします。
df['20160101':'20160301']
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