Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】pandasで日付列を「日・月・年」の複数列に分割する方法

はじめに

データ分析の現場では、17/05/2002 のような文字列形式の日付データを扱うことがよくあります。この記事では、pandasのデータフレームに含まれる日付列を、「日(day)」「月(month)」「年(year)」の3つの列に分割する方法を解説します。

まず、以下のようなデータフレームを想定します。これを分割すると、結果は次のようになります。

         date  day month  year
0  17/05/2002   17    05  2002
1  16/02/1990   16    02  1990
2  25/09/1980   25    09  1980
3  11/05/2000   11    05  2000
4  17/09/1986   17    09  1986

解決の手順

  • 日付のリストを作成し、データフレームに格納します。
  • df['date'] 列に対して str.split() 関数を適用し、区切り文字 / を指定して文字列を分割します。
  • expand=True を指定することで、分割された各要素が個別の列として展開され、その結果を df[["day", "month", "year"]] に代入します。

サンプルコード

以下のコードで、実際の動作を確認してみましょう。

import pandas as pd

df = pd.DataFrame({
    'date': ['17/05/2002', '16/02/1990', '25/09/1980', '11/05/2000', '17/09/1986']
})
print("元のデータフレーム:")
print(df)

df[["day", "month", "year"]] = df["date"].str.split("/", expand=True)
print("\n分割後のデータフレーム:")
print(df)

実行結果

元のデータフレーム:
         date
0  17/05/2002
1  16/02/1990
2  25/09/1980
3  11/05/2000
4  17/09/1986

分割後のデータフレーム:
         date day month  year
0  17/05/2002  17    05  2002
1  16/02/1990  16    02  1990
2  25/09/1980  25    09  1980
3  11/05/2000  11    05  2000
4  17/09/1986  17    09  1986

ポイント解説

str.split() メソッドは、Series内の各文字列を指定した区切り文字で分割します。重要なのは expand=True オプションです。これを指定しない場合、分割結果はリストとして1つの列に格納されますが、True を指定することで、各要素が独立した列に展開されます。そのため、複数の列へ一度に代入することが可能になります。

なお、分割後の列のデータ型は文字列(object型)になる点に注意してください。数値として扱いたい場合は、astype(int) を使って型変換を行うか、pd.to_datetime() を使って日付型に変換してから .dt.day.dt.month プロパティで抽出する方法もあります。

  1. 【Python】Name列を基準にDataFrameを降順に並べ替えるプログラムの作成方法

    はじめにpandasのDataFrameを特定の列(ここでは「Name」列)を基準に降順で並べ替える方法を解説します。データ分析では、名前のアルファベット順や数値の大小に応じてデータを整理したい場面がよくあります。そんなときに活躍するのが sort_values() メソッドです。入力データ以下のサンプルDataFrameを想定します。 Id Name 0 1 Adam 1 2 Michael 2 3 David 3 4 Jack 4 5 Peter出力結果Name列を基準に降順でソートすると、次のようになります。 Id

  2. Pythonで日付シリーズから年間通算日(day of year)を取得して出力する方法

    はじめにpandasを使ったデータ分析では、日付データから「その年の何日目にあたるか」を求めたい場面がよくあります。この記事では、日付シリーズ(Series)から年間通算日(day of year)を簡単に取得して出力するPythonプログラムを紹介します。解決のアプローチこの問題を解決するには、以下の手順に従います。日付のSeriesを定義します。pd.date_range() を使って、開始日 2020-01-10 から5日分の日付範囲を生成します。Series.dt.dayofyear プロパティを使って、各日付の年間通算日を取得します。日付範囲の作成まず、開始日 2020-01-10