Part3に引き続きデータの前処理編となります。
今回はPart3で予告したとおり、日付の整形を行います。
現在、年・月・日と個別の列になっている日付データyear・month・dateを、年月日に新たな列Dateを作り、そこに1列での表示するように変更します。
2020/02/05〜2020/06/08までのデータなので、最初が20200205、最後が20200608と表示されることを目指します。
しかし、普通に加算してしまうと数字の合計になってしまいました。
infoメソッドでデータ内を確認するとカラムyear・month・dateはint64、64ビット整数型になっています。
つまりは数字。
yearが2020、monthが2、dateが5だと合計されて2027になってしまいます。
これは当然の結果です。
私が考えていたのは文字列の加算。
その為、数字から文字列にキャストする必要があります。
しかし、この場合でも問題があります。
yearが2020、monthが2、dateが5の場合、202025となってしまいます。
必要なのは20200205。
その為、month・dateの数字が一桁の場合、数字の前に0を付ける処理を行う必要があります。
試行錯誤の結果、出来上がったコードが以下となります。
ymd_l = []
y_l = []
m_l = []
d_l = []
for y in c19_j2["year"]:
y = str(y)
y_l.append(y)
for m in c19_j2["month"]:
m = str(m)
if len(m) == 1:
m = "0" + m
m_l.append(m)
else:
m_l.append(m)
for d in c19_j2["date"]:
d= str(d)
if len(d) == 1:
d = "0" + d
d_l.append(d)
else:
d_l.append(d)
nums = len(m_l)
for num in range(nums):
ymd = y_l[num] + m_l[num] + d_l[num]
ymd_l.append(ymd)
c19_j2["Date"] = pd.DataFrame(ymd_l)
上記キャプチャーにコメントを記入しているように、
①年月日・年・月・日を格納する空のリストを作成
②year・month・dateの各列をfor文でまわしリストに格納する処理を実行
この際、文字列にキャスト
さらに、month・dateが一桁の場合はif文で頭に0を追加する処理を記載
も実行
③リストに格納した年・月・日をそれぞれfor文で回し、年月日リストに格納
④年月日リストをデータフレームc19_j2に新たな列Dateとして追加
といった処理を行っています。
上記コードを実行したところ表示されたのが以下となります。
問題なく月・日が二桁、数字が一桁の場合は頭に0の付いた年月日のデータの入った新しい列Dateが追加されました。
さっそく年月日の変換が正しく行われているか確認を行いたいのですが、列が離れていて少し面倒。
その為、作業を容易にするべく並べ替えを行いたいと思います。
また、リネームも行いたいので、次回にそれらを一緒に処理しようと思います。