web-dev-qa-db-ja.com

Pandas特定の年のデータフレーム行をフィルタリングする

データフレームdfがあり、Date列があります。 2つの新しいデータフレームを作成します。年がsome_yearに等しいdfのすべての行を含むものと、年がsome_yearに等しくないdfのすべての行を含む別のデータフレーム。 df.ix['2000-1-1' : '2001-1-1']を実行できることは知っていますが、2000年にないすべての行を取得するには、2つの追加データフレームを作成し、それらを連結/結合する必要があります。

このような方法はありますか?

include = df[df.Date.year == year]
exclude = df[df['Date'].year != year]

このコードは機能しませんが、同様の方法はありますか?

13
user3494047

日時アクセサーを使用できます。

import datetime as dt
df['Date'] = pd.to_datetime(df['Date'])

include = df[df['Date'].dt.year == year]
exclude = df[df['Date'].dt.year != year]
20
Vaishali

マスクを~で反転し、条件に Series.dt.year を使用してキャスト文字列intyearを指定することで、単純化できます。

mask = df['Date'].dt.year == int(year)
include = df[mask]
exclude = df[~mask]
3
jezrael