PandasのDataframeにおける変換の罠
Dataframeで日付データをdatetime64のフォーマット処理する際に引っかかったことの備忘録。
エクセルファイルの日付データをPandasに取り込んだ際にdatetime64形式だと便利なので今まで下記で変換していた。
pd.to_datetime(df ,format='%Y-%M-%D %H:%M:%S')
大半の列については処理できたが、いくつかの列で下記エラーが出て処理できなかった。
Reindexing only valid with uniquely valued Index objects
処理できる列と出来ない列を見比べてみると、以下の通り
【処理できる列】
0 2019-10-08 00:00:00 1 2019-10-08 00:00:00 2 2019-10-08 00:00:00 3 2019-10-08 00:00:00 4 2019-10-08 00:00:00 5 2019-10-08 00:00:00 6 2019-10-08 00:00:00 7 2019-10-08 00:00:00 8 2019-10-08 00:00:00 9 2019-10-08 00:00:00 10 2019-10-08 00:00:00 11 2019-10-08 00:00:00 12 2019-10-08 00:00:00 13 2019-10-08 00:00:00 14 2019-10-08 00:00:00 15 2019-10-08 00:00:00 16 2019-10-08 00:00:00 17 2019-10-08 00:00:00 18 None 19 None 20 None 21 None 22 None 23 None 24 None 25 None 26 None 27 2019-10-22 00:00:00 28 2019-10-22 00:00:00 29 2019-10-22 00:00:00
【処理できない列】
0 2019-10-08 00:00:00 1 2019-10-08 00:00:00 2 2019-10-08 00:00:00 3 2019-10-08 00:00:00 4 2019-10-08 00:00:00 5 2019-10-08 00:00:00 6 2019-10-08 00:00:00 7 2019-10-08 00:00:00 8 2019-10-08 00:00:00 9 2019-10-08 00:00:00 10 2019-10-08 00:00:00 11 2019-10-08 00:00:00 12 2019-10-08 00:00:00 13 2019-10-08 00:00:00 14 2019-10-08 00:00:00 15 2019-10-08 00:00:00 16 2019-10-08 00:00:00 17 2019-10-08 00:00:00 18 NaN 19 NaN 20 NaN 21 NaN 22 NaN 23 NaN 24 NaN 25 NaN 26 NaN 27 2019-10-22 00:00:00 28 2019-12-16 00:00:00 29 2019-10-22 00:00:00
どうやら空白行がNoneだと処理できて、Nanだと処理できない様子。とりあえず前処理でNanをNoneに置換する以下を導入。
df.where(df.notna(), None)
無事に変換できるようになりました。