DataScience

【Pandas】DataFrameの列が日付型かどうかを判定する

MAX

Pythonでの日付の扱いは慣れないとややこしいが、PandasのDataFrameやSeriesでの日付の扱いも慣れないとややこしい。

DataFrameやSeriesの場合、見た目は日付型っぽく見えても型はただの文字列(Object)だったりするので、見た目だけで判断していると思わぬところでエラーが発生する。

列が日付型かの判定方法を説明する。

スポンサーリンク

DataFrameの列が日付型か判定

api.types.is_datetime64_dtypeでdatetime64か判定を行う。

データ作成

1date1 = ["2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04"]
2date2 = ["2020-01-01", "2020-02-02", "2020-03-03", "2020-04-04"]
3
4df_date = pd.DataFrame(data={"date1": date1,
5                             "date2": date2})
6df_date["date1"] = pd.to_datetime(df_date["date1"])
7
8print(df_date)
9#        date1       date2
10# 0 2020-01-01  2020-01-01
11# 1 2020-02-02  2020-02-02
12# 2 2020-03-03  2020-03-03
13# 3 2020-04-04  2020-04-04
14
15print(f"{df_date.dtypes=}")
16# df_date.dtypes=date1    datetime64[ns]
17# date2            object
18# dtype: object

printしただけだとdate1もdate2も見た目は同じ。

しかし型を見ると、date1はdatetime64[ns]でdate2はobjectなので、全く異なる。

is_datetime64_dtypeで型判定

1# datetime64なのでTrue
2pd.api.types.is_datetime64_dtype(df_date["date1"])
3# True
4
5# ObjectなのでFalse
6pd.api.types.is_datetime64_dtype(df_date["date2"])
7# False
8
9# 1次元ではないのでFalse
10pd.api.types.is_datetime64_dtype(df_date)
11# False

上記の例では日付objectをdatetime64に変換してから型判定をしたが、型がdatetime64であればTrueになる。

1# datetime64
2pd.api.types.is_datetime64_dtype(np.datetime64)
3# True
4
5# datetime64[ns]の1次元配列(要素なし)
6pd.api.types.is_datetime64_dtype(np.array([], dtype="datetime64[ns]"))
7# True
8
9# DatetimeIndex(要素なし)
10pd.api.types.is_datetime64_dtype(pd.DatetimeIndex([], dtype="datetime64[ns]"))
11# True

datetime64, datetime64[ns]は基本的にTrue判定されるが、timezoneを指定するとFalseとなる。

1# timezoneを指定したdatetime64[ns]
2pd.DatetimeTZDtype(tz="UTC")
3# datetime64[ns, UTC]
4
5# timezone指定はFalse
6pd.api.types.is_datetime64_dtype(pd.DatetimeTZDtype(tz="UTC"))
7# False

公式にも判定可能な内容が分かりやすく記載されている。

is_datetime64_dtype

timezone指定可能か、datetime64かdatetime64[ns]かなどの判定結果が異なるis_datetime64が色々とある。

色々なis_datetime64

is_datetime64には色々な種類がある。

is_datetime64_any_dtype

timezoneを指定したdatetime64もTrueとなる。それ以外はis_datetime64_dtypeと同じ。

1# datetime64[ns]はTrue
2pd.api.types.is_datetime64_any_dtype(df_date["date1"])
3# True
4
5# objectはFalse
6pd.api.types.is_datetime64_any_dtype(df_date["date2"])
7# False
8
9# datetime64はTrue
10pd.api.types.is_datetime64_any_dtype(np.datetime64)
11# True
12
13# timezone指定もTrue
14pd.api.types.is_datetime64_any_dtype(pd.DatetimeTZDtype(tz="EST"))
15# True

公式にも分かりやすく例が記載されている。

is_datetime64_any_dtype

is_datetime64_ns_dtype

datetime64はFalseとなる。datetime64[ns, tz]はTrueとなる。

1# datetime64[ns]はTrue
2pd.api.types.is_datetime64_ns_dtype(df_date["date1"])
3# True
4
5# objectはFalse
6pd.api.types.is_datetime64_ns_dtype(df_date["date2"])
7# False
8
9# datetime[ns, tz]はTrue
10pd.api.types.is_datetime64_ns_dtype(pd.DatetimeTZDtype(tz="EST"))
11# True
12
13# datetimeはFalse
14pd.api.types.is_datetime64_ns_dtype(np.datetime64())
15# False

公式にも分かりやすく例が記載されている。

is_datetime64_ns_dtype

is_datetime64tz_dtype

timezoneを指定しないとFalseになる。

1# datetime64[ns]はFalse
2pd.api.types.is_datetime64tz_dtype(df_date["date1"])
3# False
4
5# objectはFalse
6pd.api.types.is_datetime64tz_dtype(df_date["date2"])
7# False
8
9# datetime64[ns, tz]はTrue
10pd.api.types.is_datetime64tz_dtype(pd.DatetimeTZDtype(tz="EST"))
11# True
12
13# datetime64はFalse
14pd.api.types.is_datetime64tz_dtype(np.datetime64())
15# False

公式にも分かりやすく例が記載されている。

is_datetime64tz_dtype

まとめ

判定したい内容に応じてis_datetime64_dtype系を使い分ける。

メソッドdatetime64[ns]datetime64[ns, tz]datetime
is_datetime64_dtypeTrueFalseTrue
is_datetime64_any_dtypeTrueTrueTrue
is_datetime64_ns_dtypeTrueTrueFalse
is_datetime64tz_dtypeFalseTrueFalse
スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました