Jupyterの冒頭で必ず登場する、read_csvに使用に関して。
型指定
よくあるのが、ユーザIDや商品IDがintなどになっている場合。
mergeしようとした時に、数値とのmergeはダメよと言われるパターン。
import pandas as pd
df = pd.read_csv('sample_data/mnist_test.csv')
# 指定した列の型を変換
df.astype({'uid': str}, {'itemid': str})
同じことが引数、dtypeを使用することでできる。
# 引数 "dtype" を辞書形式で設定すると、読み込み時に型指定できる
df = pd.read_csv('sample_data/mnist_test.csv', dtype={'uid': int,'itemid': str})
エンコード
オンラインストアの出力するデータが、shiftJISだったりすることがわりとよくある(エクセルで作業しやすいようにしてる?)
そのままread_csvするとpandasの怒りをかうので、エンコーディングを指定する必要がある。
# shift_jisの場合
df = pd.read_csv('sample_data/mnist_test.csv', encoding='shift_jis')
が、まれにこの指定でも読み込めない場合がある。その場合は下記指定をつける。
df = pd.read_csv("sample_data/mnist_test.csv",encoding="cp932")
仕組みとしては、下記機能を使用しているらしい(よく分かっていないので、いずれ整理する)。
おそらく顧客の記入したデータに特殊な文字が紛れ込んでいるのではないかと推測。中国語ユーザなどに多い。
※「cp932」はMicrosoftがShift_JISを独自に拡張した文字コードです。
この記述を行うとシフトJISで記述されたプログラムをUTF-8に変換して処理してくれます。よってテキストエディタなどでプログラムを記述した時に、文字コードをシフトJISを使って保存することができます。
https://www.javadrive.jp/perl/encoding/index2.html
そして、コードを流用した際に、普通のUTF-8のCSVを読むときにもこのエンコードを指定してエラーとなるパターンまでがお約束。