【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()で必要な形式にフォーマット。
解っちゃえば難しくないんだけどねぇ(二時間くらい悩んだ)
この記事が気に入ったらサポートをしてみませんか?