DataFrameの型を変えたい

Pandasで日付のみの列を作成する方法

ご質問のコードでは、df2 = dfと代入することでdfの参照をコピーしているため、df2の操作がdfにも反映されてしまっています。日付のみの列を作成しつつ、dfの内容を変更しないためには、以下の2通りの方法があります。

方法1:copy()メソッドを使用する

python

1import pandas as pd 2import datetime 3 4a=[datetime.datetime(1900, 1, 1,23,59,0)]*int(3)5df=pd.DataFrame(a,columns=['日時'])6 7df2 = df.copy()8df2['日時'] = df2['日時'].dt.date 9 10print(df)11print(df2)

この方法では、copy()メソッドでdfの複製を作成し、その複製に対して操作を行うため、dfの内容は変更されません。

方法2:locを使用する

python

1import pandas as pd 2import datetime 3 4a=[datetime.datetime(1900, 1, 1,23,59,0)]*int(3)5df=pd.DataFrame(a,columns=['日時'])6 7df2 = df.loc[:, '日時'].dt.date 8df2 = pd.DataFrame(df2)9df2.columns = ['日付']10 11print(df)12print(df2)

この方法では、locdfの「日時」列のみを抽出し、dt.dateで日付のみの列を作成します。その後、pd.DataFrameで新しいデータフレームを作成し、列名を「日付」に変更します。

上記の方法はいずれも、dfの内容を変更せずに、日付のみの列df2を作成することができます。状況に合わせて適切な方法を選択してください。

補足

  • 上記のコードでは、datetime.datetime(1900, 1, 1, 23, 59, 0)を3つ繰り返してリストを作成しています。これは、1900年1月1日 23時59分00秒の日付を3つ要素持つリストを作成しています。
  • df.copy()df.loc[:, '日時']はどちらも、dfのデータのコピーを作成します。ただし、df.copy()dfのすべての列と行のコピーを作成するのに対し、df.loc[:, '日時']は指定した列(この場合は「日時」列のみ)のみのコピーを作成します。

コメントを投稿

0 コメント