見出し画像

【python】pandasDFで日付を扱う-Timestamp型か判定したり、datetime型に変換したり-

<class = 'pandas._libs.tslibs.timestamps.timestamp'>の処理でハマった話。

結論


# DFをリスト化して、Timestamp型ならdatetimeに変換する
import pandas as pd
deta = pd.DataFrame(”二次元リスト的なデータ”)
list = data.values.tolist()
result = []
for line in list:
    temp = []
    for val in line:
        if type(val) is pd.Timestamp: # Timestamp型かどうか判定
            time = val.to_pydatetime() # datetime型に変換
            strtime = time.strftime("%Y/%m/%d")
        if type(val) == float:
            val = round(val)
            temp.append(val)
    result.append(temp)

やりたいこと

pandasDFで取得してきたデータの中に日付データがあった

勝手にTimestamp型で入ってきている

DFの中身を解体してフォーマットを直して辞書にしたいのに、Timestamp型が邪魔で突っかかる(type(val)==floatがtrueになるらしくて、round関数に掛かってしまう→エラー)

Timestamp型かどうかを判定したい

判定に成功したからそのまま結果に入れちゃえ

Timestamp型そのまま結果に入れると「2020-08-07 00:00:00+00:00」って表示されてしまって邪魔なので、日付部分だけにフォーマットしたいんだけどそのままだとstrftime()できない

Timestamp型かどうかの判定

if type(val) is pd.Timestamp:
if type(val) == pd.Timestamp: # これだとダメ
if type(val) is pandas.Timestamp:
# pandasをas pd でインポートしてたらこれはダメ
# pandasがインポートされてないとそもそもダメ

Timestamp型をdatetime型に変更するto_pydatetime()

time = val.to_pydatetime()

一部記事だとto_datetime()になってるけど、もう廃止されてるのでto_pydatetime()を使おう。
これでdatetime型に変換されるので、strftime()で必要な形式にフォーマット。

解っちゃえば難しくないんだけどねぇ(二時間くらい悩んだ)

この記事が気に入ったらサポートをしてみませんか?