[Python]csvの年月日を別の列にしたい

今回はこうです。これを、

こうしたい!!↓

ということでまとめていきます。

ついでに、エラー

AttributeError: Can only use .dt accessor with datetimelike values

という方も解決できると思いますので宜しくお願い致します。

一応、元のCSVサンプルです。

さて多くは語らず「とりあえず動かしたい!」という方向けに結論から書きます。こうです!!

import pandas as pd

df = pd.read_csv("jikan.csv",encoding="cp932") 
df["営業日変換"]=pd.to_datetime(df["営業日"])#営業日の日付けstr型をtimestamp型に変換、同時に「営業日変換」列を作る
df["営業日年"]=df["営業日変換"].dt.year #営業日変換から年を取り出して尚且つdfに「営業日年」という列を作る
df["営業日月"]=df["営業日変換"].dt.month #営業日月を作る
df["営業日日"]=df["営業日変換"].dt.day #営業日日 を作る

df = df[["営業日年","営業日月","営業日日"]]#都合が良いように列を抽出する

df

#---ここから↓は特に必要なし
df.to_csv("tekitou.csv",index=False,encoding="cp932") #自由な名前でcsvに出力

以上

サンプルのcsvと同じ階層で上のコードを実行するだけでできます!簡単ですね!

一応、解説的なもの

まず、最初の方に挙げたエラー[AttributeError: Can only use .dt accessor with datetimelike values]ですが、一番最初のデータファイルの年月日の型がstr型だったんですね

なので、途中str型からdatetime64[ns]型に変換しております。

動作のイメージはこうです。

  1. csvを読み込んで「df」(任意)という関数を作ります。
  2. dfの中にある「営業日」列を検索
  3. 「営業日」列をdatetime64[ns]型に変換してdfに新しい列「営業日変換」列を作ります。
  4. 「営業日変換」列から年の部分を取り出し「営業日年」列を作る
  5. 月 作る
  6. 日 作る
  7. 「df」関数に表示させたい列を順番に抽出する
  8. csv出力

といった感じです、動作的に「営業日」列を入れ替えることは出来ず

新しく色々作ってそれだけを取り出しあたかも入れ替えたように見せているだけ

といった具合です。

コメント

タイトルとURLをコピーしました