Excel から読み込んだときに、日付がバラバラなケースを直したい。
df = pd.read_excel(filename, sheet_name = 'Sheet1')
pandas の read_excel を使って、Excelファイルを読み込んだとき、日付が、”2020-01-01″のように文字列として読み込まれる時と、”43830″のようにシリアル値として読み込まれる時がある。
文字列とシリアル値が混在したままでは、扱いが難しいため、Datatime 型に統一する方法を下記に書いておく。
import pandas as pd
from datetime import datetime
# データの読み込み (日付が、文字列とシリアル値と混在したケースを想定)
df = pd.DataFrame({'日付': ['2020-01-01', 43830, '2020-01-03', 43832, '2020-01-05']})
# df
# 日付
# 0 2020-01-01
# 1 43830
# 2 2020-01-03
# 3 43832
# 4 2020-01-05
# 列の型をstrに変更
# astype()は、データ型(dtype)を変更する
df['日付'] = df['日付'].astype(str)
# 日付に'-'を含むものをTrueとする
date_mask = df['日付'].str.contains('-')
# 日付に'-'を含まないもののみを取り出す
# copy()は、データをコピーする
df_excel = df[~date_mask].copy()
# 日付に'-'を含むもの(regularデータ)のみを取り出す
df_reg = df[date_mask].copy()
# regularデータをdatetime型に変換する
df_reg['日付'] = pd.to_datetime(df_reg['日付'])
# excelデータをdatetime型に変換する
df_excel['日付'] = pd.TimedeltaIndex(df_excel['日付'].astype(int), unit='d') + datetime(1900, 1, 1)
# regularデータとexcelデータを結合する
df['日付'] = pd.concat([df_reg['日付'], df_excel['日付']])
# df
# 日付
# 0 2020-01-01
# 1 2020-01-02
# 2 2020-01-03
# 3 2020-01-04
# 4 2020-01-05
最近のコメント