データ分析実践
上級問題チェック
問題 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)



