TECCAMP 残り109日 このブログにくる人達

wordpressの機能で来訪者がどの国から、どうやって(例えば検索で!とかTwitterから!とか)くるか?

などの情報がデイリーで見れるのですが

やはりよく見られているのはエラー及びpythonの記事でした。

うん、今後まとめるならやはりエラーですねエラー

エラーの対応方法は本当に枚挙に暇がない為数あれば役に立つでしょう

一つ、このブログの意義を決めました。

Google Colaboratory 自分が使っているPythonコードを使用する方法

※こちらは自分が作成したコードを実行して頂く方向けに作成しているものでもあります。

では、コードの使用手順を説明していきます。

〇〇.ipyn もしくは 〇〇.py というファイルを用意して下さい

以上で渡したコードの実行をGoogleドライブ上で行うことができます。この記事は以上です。

もしGoogleドライブのマウント方法を知りたい場合はこちら↓

Google Colaboratory にてGoogleドライブのマウント方法【GIF解説】

※Googleアカウントを使用している前提で話を進めますので、もしアカウントが無い場合は無料で作成をお願いいたします。

※画面は黒いですが、主がダークモードにしているだけで、恐らく皆様最初は白だと思うので、気にしなくて大丈夫です。

まずは下記アドレスに飛んで下さい

Google Colaboratory

https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja

そして、↓のように一度右上の部分に自分のGoogleアカウントが表示されてるか確認して下さい(確認できない場合はクリックからGoogleアカウントへのログインをお願いいたします。)

ログインができたら、左側からマウント作業を行ってください、

←の説明

①フォルダマークを選択

②暫く待っている間、切り替わったらGoogleドライブマークを選択

③右側にコマンドのようなものが出たら成功

上の補足

フォルダ選択中右側でこの接続済みになったらOKです。

コードを実行します。実行すると新しいタブが開きます。

新しいタブではGoogleアカウントとの連携のため、専用のコードが発行されます。

発行されたものをコピーします。

コピーをしたら先ほどの画面に戻り、空白の部分にコピペ(Ctrl+Vが良いかも)し、Enterキーを押します。

以下の画像のように自分のフォルダが見えたら成功です。

これで、自分もどこでもGoogleドライブを通してコードからのファイル操作が行え

他者様の環境でも、コードを実行できる環境ができましたので、皆様ご活用下さい!

[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出力

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

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

といった具合です。

【Python】大量のCSVファイルを縦に逆順に結合する

関連記事 Python 大量のcsvファイルを縦に結合したい場合

上記記事までは良いんですが、今回自分はそれを逆順に繋げたいと思い検索

とりあえずうまくいったものがコレ

import pandas as pd
import glob
csv_files = glob.glob('*.csv')
list = []#リストの初期化
for file in csv_files: #←ここに代入 →この数分繰り返す
    list.append(pd.read_csv(file,encoding="cp932"))#リストにcsvファイルを追加していく

list.reverse() #ここを追加

df = pd.concat(list)
df.to_csv("total.csv",index=False,encoding="cp932")

とりあえず、これだけで縦にCSVファイルを結合したい場合は解決!終わり!

関連記事 【エラー】UnicodeDecodeError: ‘shift_jis’ codec can’t decode byte 0x87 in position 3340: illegal multibyte sequence が出た場合

参考記事 https://note.nkmk.me/python-reverse-reversed/

【エラー】UnicodeDecodeError: ‘shift_jis’ codec can’t decode byte 0x87 in position 3340: illegal multibyte sequence が出た場合

UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x87 in position 3340: illegal multibyte sequence

自分の場合はread_csv(file,encoding=”SHIFT-JIS”)で読み込もうとしたところ発生

その時の対処法はread_csv(file,encoding=”cp932″)にしたところ解決

これについては検索すると多岐に渡る環境や元ファイルの要因がある為、解説などはしませんが

utf_8等に変更する事でも解決する可能性あり

Python 大量のcsvファイルを縦に結合したい場合

詳しい説明や動作は別のサイト様に任せて「とりあえず動かしてぇ!」という方向けです。

※pyファイルとcsvファイルが同フォルダにある事が前提

※データ整形などしていないので、綺麗なデータをとりあえずくっつけたい方向け

これが一番うまくいったもの、とりあえず動く

import pandas as pd
import glob
csv_files = glob.glob('*.csv')
list = []#リストの初期化
for file in csv_files: #←ここに代入 →この数分繰り返す
    list.append(pd.read_csv(file,encoding="cp932"))#リストにcsvファイルを追加していく

df = pd.concat(list)
df.to_csv("total.csv",index=False,encoding="cp932")

一応、動作説明

1、globでフォルダ内の.csvファイルの情報を取得

2、リストの宣言(入れモノを用意しないとね)

3、globで取得したファイル数分の操作のくりかえし+リストにファイルを追加していく

4、結合、今回はtotalって名前にして同フォルダに出力

関連リンク 【エラー】UnicodeDecodeError: ‘shift_jis’ codec can’t decode byte 0x87 in position 3340: illegal multibyte sequence が出た場合