【Pandas】.to_datetime()の使い方や注意点を説明します　no.30

![見出しを追加 (70).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/acc4b874-9a49-2b59-1813-9946313c839b.png)

こんにちは、まゆみです。

Pandas についての記事をシリーズで書いています。

今回は第30回目になります。

前々回から、Pandasの日付や時間に関するモジュールを扱って書いています。

今回の記事でも引き続き時間に関するモジュールを書いていきますね。

今回の記事では、『.to_datetime()』メソッドについて書いていきます


では、さっそく始めていきます


#.to_datetime()メソッド

前々回の記事では、『TimeStamp』について

前回の記事では『DatetimeIndex』について扱いましたが、

>TimeStampは、ある1点の時間に関するデータ

>DatetimeIndexは複数の時間に関するデータ(TimeStampが複数集まったもの)

なので、

>TimeStamp を作る時は、文字列型データを

>DatetimeIndexを作る時は、リスト型データを

それぞれ引数として渡しました。


.to_datetime()メソッドは、引数として渡すものによって、

上記に上げたようなPandasの時間に関するオブジェクトを作ってくれるメソッドになります。

言葉で説明するより、実際にコードを書いて結果を示した方が分かりやすいと思うので、さっそく書いていきます


##.to_datetime()メソッドに1つの値を引数として渡す

![スクリーンショット 2021-04-04 090552.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/0eed1384-0209-ffcd-a76e-5d90d6b23a83.jpeg)


.to_datetime()メソッドに<font color="Red">1つの値を渡すと、TimeStampオブジェクトが作られます。</font>

引数として渡すものは、文字列でも、dateオブジェクトでも、datetimeオブジェクトでも構いません。

## 複数の値をリストにして渡す

.to_datetime()メソッドに複数の値を入れた<font color="Red">リストを引数として渡すと、DatetimeIndexを返してくれます。</font>

![スクリーンショット 2021-04-04 091405.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/c0c66517-54f8-52fa-3a1e-1e578be18ec1.jpeg)

##Seriesを渡す

![スクリーンショット 2021-04-04 094040.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/e6b736f8-0198-fa72-e869-818a11df6221.jpeg)
引用元：[Pandasドキュメント](https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html#pandas-to-datetime)

また、実際の場面では、Series を引数として渡すことも多いと思います。

Seriesを引数と渡すとどのように結果が返ってくるか見てみましょう

<font color="Red">それぞれの値が色んなフォーマットで</font>書かれたSeriesをtimesという変数に代入しました。

そのtimesというSeriesを.to_datetime()の引数として渡すと、全ての値をちゃんとフォーマットして返してくれます。


![スクリーンショット 2021-04-04 094812.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/36528ea7-4016-ae86-92e8-5210c396a7fb.jpeg)

#.to_datetime()メソッドの弱点

.to_datetime()メソッドは、Pandasの時間に関するオブジェクトに変換してくれますが、では、『時間に変換しようが無いとき』はどうしたら良いのでしょうか？

例えば

>"Hello!" という文字列は、年月日に変換できませんよね

また

>2020/2/31 

は存在しません

![スクリーンショット 2021-04-04 095613.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/c9cd2ca1-5966-e166-8d84-006ab804bd1c.jpeg)

実際、データを分析しようとするときは、<font color="Red">エラーを出す原因となっている部分は取り除いたり何かしらの処理</font>を施さなければいけません。

上記のスクショのように、エラーが出てしまってはそこからのプロセスを進めることができません。

##.to_datetime()のパラメーター　errors
![名称未設定のデザイン (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/ee16ebbe-00ec-046b-dfe4-4769546f5d4f.png)


そこで、エラーを出さずに、エラーの原因となっているところを目で分かるようにします。

![スクリーンショット 2021-04-04 100228.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/a5824c7d-41e1-3449-b244-1eb9965a7c0f.jpeg)
引用元：[Pandasドキュメント](https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html#pandas-to-datetime)
エラーで画面が真っ赤になるのではなく、<font color="Red">エラーの原因となっている『Hello』や『2000/2/30』を『NaT』と表示してくれる</font>ので、のちの処理がしやすくなります


.to_datetime()のパラメーターerrorsの引数を『coerce』(ちなみにcoerceは強制という意味の英語です。)にしてみます。
![スクリーンショット 2021-04-04 100748.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/6f0143de-b279-15ed-fc2d-90528fdc749b.jpeg)

#UNIXタイムも.to_datetime()で変換できる？

UNIX時間とは

1970年1月1日の真夜中0時からの経過秒数によって、時間を表す方法です。

※興味のある方は[wikipedia](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93)で詳しく読んでみてくださいね。

では、このようなUNIX時間もPandasの.to_datetime()で変換する事ができるでしょうか？

![見出しを追加 (69).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/b8cece12-0cee-f3cd-0593-6a5c524c7cf3.png)
![スクリーンショット 2021-04-04 102758.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/656f71c4-9a87-c02b-17be-aad9175975e0.jpeg)

ちなみに引数の"s" はsecond(秒)のsです

#まとめ
では今回の.to_datetime()についての記事を締めくくらせていただきます。

次回は、.date_range()という時の期間を指定するメソッドを紹介していきますね。