Pandas で DataFrame 列を Datetime に変換する

Mehvish Ashiq 2023年6月21日
  1. pd.to_datetime() を使用して DataFrame 列を Datetime に変換する
  2. pd.astype() を使用して DataFrame 列を Datetime に変換する
  3. lambda を使用して DataFrame 列を Datetime に変換する
  4. apply() を使用して、複数の DataFrame 列を Datetime に変換する
Pandas で DataFrame 列を Datetime に変換する

Python で pandas ライブラリを使用してデータを処理しているときに、時系列データに遭遇することがあります。 ここで、文字列またはオブジェクト型の列を datetime 形式に変換する必要がある場合があります。

今日のチュートリアルでは、pd.to_datetime()astype()lambda、および apply() メソッドを使用して、文字列またはオブジェクト型の列を datetime 形式に変換する方法を示します。

pd.to_datetime() を使用して DataFrame 列を Datetime に変換する

コード例:

import pandas as pd

df = pd.DataFrame({"Date": ["12/08/2019", "08/01/2020", "11/6/2021", "12/12/2022"]})
df["converted_to_datetime"] = pd.to_datetime(df["Date"])
print(df.info())

出力:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column                 Non-Null Count  Dtype
---  ------                 --------------  -----
 0   Date                   4 non-null      object
 1   converted_to_datetime  4 non-null      datetime64[ns]
dtypes: datetime64[ns](1), object(1)
memory usage: 192.0+ bytes
None

この出力は、それぞれ object および datetime64[ns] 型の Date および converted_to_datetime という 2つの列があることを示しています。 object 型を datetime にどのように変換したのでしょうか?

以下で調べてみましょう。

最初に、pandas という名前の Python ライブラリをインポートし、エイリアスを pd に設定してキーストロークを回避しました。 次に、日付を DD/MM/YYYY 形式で保持する Date という名前の列を 1つ含むデータフレームを作成しました。

ここでは、フォーマットを変更する必要はありませんが、Date 列のデータ型を object から datetime に変換する必要があります。 そのために、to_datetime() メソッドを使用し、シリーズをそれに渡し、データフレーム列を object から datetime に変換します。

to_datetime() メソッドは、関数の引数として配列、シリーズ、データフレーム、スカラー、または辞書のようなものを取り、指定された引数を Pandas datetime オブジェクトに変換できます。 ここでは、info() でデータフレームを簡潔にまとめました。

特定の形式の日付が必要だとします。 どうすればそれができますか? 同じ例を練習して、日付形式を変更してみましょう。

format 属性で to_datetime() を使用して日付形式を変更する

コード例:

import pandas as pd

df = pd.DataFrame({"Date": ["12/08/2019", "08/01/2020", "11/6/2021", "12/12/2022"]})
df["converted_to_datetime"] = pd.to_datetime(df["Date"], format="%m/%d/%Y")
print(df.info())

出力:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column                 Non-Null Count  Dtype
---  ------                 --------------  -----
 0   Date                   4 non-null      object
 1   converted_to_datetime  4 non-null      datetime64[ns]
dtypes: datetime64[ns](1), object(1)
memory usage: 192.0+ bytes
None

このコード スニペットは最後の例と似ており、同じ出力を生成しますが、日付形式の指定に使用される format 属性を使用して MM/DD/YYYY 形式の日付を取得しています。 必要に応じて、時間を %H:%M:%S として指定することもできます。

infer_datetime_format 属性で to_datetime() を使用する

コード例:

import pandas as pd

df = pd.DataFrame({"Date": ["12/08/2019", "08/01/2020", "11/6/2021", "12/12/2022"]})
df["converted_to_datetime"] = pd.to_datetime(df["Date"], infer_datetime_format=True)
print(df.info())

出力:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column                 Non-Null Count  Dtype
---  ------                 --------------  -----
 0   Date                   4 non-null      object
 1   converted_to_datetime  4 non-null      datetime64[ns]
dtypes: datetime64[ns](1), object(1)
memory usage: 192.0+ bytes
None

前のサンプル コードでは、format 属性を使用し、to_datetime() メソッドを使用して日付形式を指定する必要がありましたが、infer_datetime_formatTrue に設定すると、日付形式を自動的に検出し、指定された形式に変換するのに役立ちます。 データフレーム列を datetime に変更します。

pd.astype() を使用して DataFrame 列を Datetime に変換する

コード例:

import pandas as pd

df = pd.DataFrame({"Date": ["12/08/2019", "08/01/2020", "11/6/2021", "12/12/2022"]})
df["converted_to_datetime"] = df["Date"].astype("datetime64[ns]")
print(df.info())

出力:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column                 Non-Null Count  Dtype
---  ------                 --------------  -----
 0   Date                   4 non-null      object
 1   converted_to_datetime  4 non-null      datetime64[ns]
dtypes: datetime64[ns](1), object(1)
memory usage: 192.0+ bytes
None

このコード フェンスは、series.astype() メソッドを使用して、データフレーム列を datetime に変換します。 この関数を使用して、文字列列を Pandas データフレームの datetime 型に変換できます。

データ型を変換するには、データ型を引数として指定する必要があります。 私たちの場合は 'datetime64[ns]' です。

lambda を使用して DataFrame 列を Datetime に変換する

コード例:

import pandas as pd
from datetime import datetime

df = pd.DataFrame({"Date": ["12/08/2019", "08/01/2020", "11/6/2021", "12/12/2022"]})
df["converted_to_datetime"] = df["Date"].apply(
    lambda x: datetime.strptime(x, "%m/%d/%Y")
)
print(df.info())

出力:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 2 columns):
 #   Column                 Non-Null Count  Dtype
---  ------                 --------------  -----
 0   Date                   4 non-null      object
 1   converted_to_datetime  4 non-null      datetime64[ns]
dtypes: datetime64[ns](1), object(1)
memory usage: 192.0+ bytes
None

このコード スニペットでは、DataFrame.apply() メソッドと lambda 関数を使用して値を操作しました。 ここでは、datetime.strptime() メソッドを使用して、指定された日付形式を考慮してデータフレーム列を datetime に変換しました。

lambda 式を使用する理由 シンプルさと読みやすさのために、関数の代わりに使用されます。

使用する前に datetime をインポートすることを忘れないでください。

次に、datetime に変換したい inserted 列と updated 列があるとします。 以下でそれを学びましょう。

apply() を使用して、複数の DataFrame 列を Datetime に変換する

コード例:

import pandas as pd
from datetime import datetime

df = pd.DataFrame(
    {
        "Insert_Date": ["12/08/2019", "08/01/2020", "11/6/2021", "12/12/2022"],
        "Update_Date": ["13/08/2019", "10/01/2020", "15/6/2021", "20/12/2022"],
    }
)

df[["Insert_DateTime", "Update_DateTime"]] = df[["Insert_Date", "Update_Date"]].apply(
    pd.to_datetime, errors="coerce", infer_datetime_format=True
)
print(df.info())

出力:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
 #   Column           Non-Null Count  Dtype
---  ------           --------------  -----
 0   Insert_Date      4 non-null      object
 1   Update_Date      4 non-null      object
 2   Insert_DateTime  4 non-null      datetime64[ns]
 3   Update_DateTime  4 non-null      datetime64[ns]
dtypes: datetime64[ns](2), object(2)
memory usage: 256.0+ bytes
None

ここでは、apply() メソッドを使用して、Insert_DateUpdate_Date を別の列 (Insert_DateTimeUpdate_DateTime) の datetime に変換しています。 apply() メソッドは 2つのパラメーターを取ります。

最初のパラメーターは、適用する関数名です。 この場合は pd.to_datetime です。 2 番目のパラメーターは infer_datetime_format で、一貫した日付形式を取得するために True に設定します。

astype() を使用して複数の列をキャストすることもできることに注意してください。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - Pandas DataFrame Column