read_csvのよく使う引数。型指定やエンコード。

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を読むときにもこのエンコードを指定してエラーとなるパターンまでがお約束。

参考書籍

このサイトの主
投稿を作成しました 115

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る