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)
この方法では、loc
でdf
の「日時」列のみを抽出し、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 コメント