データ分析実践
上級問題チェック

問題 3 /40

次のsample.csvの日付をdatetime型で読み込む場合、もしくはsample.csvを読み込んだ後で日付の列をdatetime型に変換する場合、正しい記述はどれか。 sample.csv ------------------------------- "日付","売上" "2023年1月10日","5000" "2023年1月11日","6000" -------------------------------

選択 1

df = pd.read_csv( 'sample.csv', parse_dates=['日付'], date_format='%Y年%m月%d日')

選択 2

df = pd.read_csv( 'sample.csv', parse_dates=True)

選択 3

df['日付'] = pd.to_datetime(df['日付'])

選択 4

df['日付'].astype('datetime')

解説

選択肢1が正解です。 sample.csv ------------------------------- "日付","売上" "2023年1月10日","5000" "2023年1月11日","6000" ------------------------------- 【選択肢1】 df = pd.read_csv( 'sample.csv', parse_dates=['日付'], date_format='%Y年%m月%d日') df ▶︎ df.dtypes ▶︎ 日付 datetime64[ns] 売上 int64 dtype: object 正しい記述です。 「parse_dates=['日付']」の引数だけでもエラーにはなりませんが、日付はobject型になります。 sample.csvのように日付が日本の書式になっている場合は、日付と解釈させるために「date_format='%Y年%m月%d日'」の引数が必要になります。 sample.csvの日付が「2023-01-10」や「2023/01/10」のように標準的なフォーマットになっていれば、date_formatの引数は不要です。その場合は「parse_dates=['日付']」の引数だけでdatetime型になります。 datetime型に変換した後は「2023-01-10」のように標準的なフォーマットになります。「2023年1月10日」のように日本の書式のままdatetime型に変換することはできません。 なお、parse_datesの引数は値をリストで指定する必要があるため、選択肢1のように「parse_dates=['日付']」としないとエラーになります。 【選択肢2】 df = pd.read_csv( 'sample.csv', parse_dates=True) df ▶︎ df.dtypes ▶︎ 日付 object 売上 int64 dtype: object エラーにはなりませんが、日付はobject型で読み込まれます。 「parse_dates=True」の引数は、インデックスの日付をdatetime型にする場合に利用します。次の記述であればインデックスがdatetime型になります。 df = pd.read_csv( 'sample.csv', index_col='日付', parse_dates=True, date_format='%Y年%m月%d日') df ▶︎ df.index ▶︎ DatetimeIndex(['2023-01-10', '2023-01-11'], dtype='datetime64[ns]', name='日付', freq=None) この場合も「date_format='%Y年%m月%d日'」をつけないと、インデックスがobject型になります。 【選択肢3】 df['日付'] = pd.to_datetime(df['日付']) DateParseErrorになります。 データを読み込んだ後、to_datetime関数でdatetime型に変換する記述ですが、sample.csvのように日付が日本の書式になっている場合は、次のようにformat引数が必要です。 df['日付'] = pd.to_datetime(df['日付'], format='%Y年%m月%d日') df ▶︎ df.dtypes ▶︎ 日付 datetime64[ns] 売上 int64 dtype: object CSVデータの日付が「2023-01-10」のように標準的なフォーマットであれば、選択肢3の記述でdatetime型になります。 【選択肢4】 df['日付'].astype('datetime') TypeErrorになります。 astypeメソッドは、astype('int')やastype('str')のように数値や文字列に変換することができますが、datetime型に変換することはできません。 (公式書籍 p.28、157)