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