4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandas.read_excelで読み込んだExcelの日付がシリアル値だったのでdatetime.datetimeに変換した

Last updated at Posted at 2020-10-14

ことのほったん

pandas.read_excelでExcelの日付を読み込むと書式設定によってデータが数値のシリアル値になった。
datetime.datetimeで統一して処理したいので変換することにした。

intのシリアル値をdatetime.datetimeに変換する方法

# date_int : シリアル値
if date_int < 60:
    # 1900-03-01より前の場合
    days = date_int -1
else:
    # 1900-03-01以降の場合
    days = date_int - 2
date_time = pandas.to_datetime('1900/01/01') + datetime.timedelta(days=days)

こんな感じでやってみた

読み込むExcelファイルはこんな感じ
スクリーンショット 2020-10-14 22.48.11.png

import datetime
import pandas


def get_datetime(val: object) -> datetime.datetime:
    """日付を取得する.
    :param val: 日付の元になる値
    :return: 日付かシリアル値であれば日付、それ以外はNone
    """
    val_type = type(val)
    # datetime.datetimeだったらそのまま返却
    if val_type is datetime.datetime:
        return val
    # pandas.Timestampはdatetime.datetimeを継承していてdatetime.datetimeとして処理できそうなのでそのまま返却
    if issubclass(val_type, datetime.datetime):
        return val
    # intだったらシリアル値としてdatetime.datetimeに変換して返却
    if val_type is int:
        if val < 60:
            # 1900-03-01より前の場合
            days = val -1
        else:
            # 1900-03-01以降の場合
            days = val - 2
        return pandas.to_datetime('1900/01/01') + datetime.timedelta(days=days)
    return None


if __name__ == '__main__':
    # pandasでExcelを読み込む
    sheet = pandas.read_excel('Book.xlsx', sheet_name='Sheet1', header=None)
    for index, row in sheet.iterrows():
        date = get_datetime(row[0])
        if date is not None:
            print(date.strftime('%Y/%m/%d'))
出力
2020/10/14
2020/10/15
2020/10/16
2020/10/17
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?