SlideShare a Scribd company logo
pandas便利だけど
デフォルトパラメータで
ファイルを読み込むな!
Python東海 #44 (2023.11.18)
H.Hiro [X (Twitter): @h_hiro_]
自己紹介
◦ H.Hiro (Twitter: @h_hiro_)
◦ Python東海の初参加は第29回(2016.2.6)
◦ 比較的不定期参加感
◦ 本業:アルゴリズム作ったりデータ分析したりしてる某
研究員
◦ ちょっとした処理はPythonで書くことが多いが、パ
フォーマンスまで考えたプログラムを書きたいときは
C++とかを使うことも
pandas
表形式のデータを扱うライブラリ
https://pandas.pydata.org/
行名と列名を入れた表のファイルを読み込み、
それを用いてアクセスしたりできる
Name Age Birthplace
Alice 20 Aichi
Bob 30 Gifu
Charles 40 Mie
import pandas as pd
data = pd.read_csv("info.csv", header=0, index_col=0)
print(data.at["Alice", "Birthplace"]) # "Aichi" を表示
pandasの(私の感じる)利点
◦ ファイルから行名や列名を取得しアクセスできる
◦ 列名だけなら、標準ライブラリの csv.DictReader で
もできるが、行名だと少々面倒
◦ 数値や文字列が混ざっていても自動で変換してくれる
◦ 先述の例だと、Ageは整数型、Birthplaceは文字列
型と扱ってくれる
Name Age Birthplace
Alice 20 Aichi
Bob 30 Gifu
Charles 40 Mie
import pandas as pd
data = pd.read_csv("info.csv", header=0, index_col=0)
print(type(data.at["Bob", "Age"])) # numpy.int64
print(type(data.at["Charles", "Birthplace"])) # str
pandasの注意点
◦ 前述の「よきにはからってくれる」点は利点でもあるの
だが、しばしば欠点にもなる
◦ すなわち、意図しない変換がなされてしまう
◦ 特に、ファイルを読み込む際の引数で、「これはデフォ
ルトパラメータにするな!」と私が思うものが結構ある
ので紹介します
pandas
◦ ファイルを読み込む関数として、pandas.read_csv を
想定して説明します
◦ read_excelというのもあり、使い方は殆ど同じです
◦ で引数を見るとこんな感じ(めちゃくちゃ多い)
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
デフォルト値のまま使うのに
注意が必要な引数
◦ header
◦ index_col
◦ na_values / keep_default_na
素性のわからないデータを読み込むときは、追加でこれ
も推奨
◦ dtype
header
◦ ヘッダー(列の名前)
◦ デフォルト:
◦ names引数で列名を別途
与えた場合は、ファイルからは
取得しない
◦ そうでない場合は、ファイルの0行目を利用する
◦ ヘッダーがあるとわかっているファイルを読み込むとき
はよいのだが、ファイルのその点を確認してから使うべ
きということで、自分は必ず0(0行目を利用)かNone
(ファイルからは読み込まない)を指定している
Name Age Birthplace
Alice 20 Aichi
Bob 30 Gifu
Charles 40 Mie
index_col
◦ インデックス(行の名前)
◦ デフォルト:原則は0列目。ただし
「0行目の列数<1行目の列数」
なら、0行目の最初のセルは
無視される(理由は後述)
◦ これもheaderと同様、「最初の列がインデックスである
か」を確認して使いたいため、自分は必ず0(0列目を
利用)かFalse(ファイルからは読み込まない)を指定し
ている
◦ index_colについては、ファイルから読み込まない場
合はFalseであることに注意
Name Age Birthplace
Alice 20 Aichi
Bob 30 Gifu
Charles 40 Mie
index_col(続き)
◦ この挙動の意味は、「0行目の
ヘッダーが、左上のセルを省略
している場合がある」ということ
を考慮している
◦ この場合、index_col=Falseを
指定しておけば、このように読
み込むが警告を出してくれる
デフォルト:原則は0列目。ただし「0行目の列数<1行目
の列数」なら、0行目の最初のセルは無視される
CSVファイル
Age,Birthplace
Alice,20,Aichi
Bob,30,Gifu
Charles,40,Mie
Age Birthplace
Alice 20 Aichi
Bob 30 Gifu
Charles 40 Mie
na_values /
keep_default_na
◦ 無効値(Python上では「nan」)と扱われる文字列を
指定
◦ デフォルトで何が該当するかはドキュメントに
https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
◦ ある列の他の内容が普通の文字列であったとしても、
その中に空欄や「NA」という文字列があるとnan扱う
になってしまう…
◦ nanがないとわかっているデータなら、
keep_default_na=Falseを指定しておき、無効値が出
ないようにするのが安全
dtype
◦ 表全体で or 列ごとに何の型と
して読み込むか強制する
◦ 例えば右の表の例で
data = pd.read_csv("info.csv",
header=0, index_col=0, dtype={"Age": str})
とすると、Age列も数値ではなく文字列となる
◦ 本来は文字列であるのだが、数値とみなせる列が混
ざっているときはこの指定が必要
◦ なおこの指定よりも keep_default_na のほうが優先
されるため、併用が吉
Name Age Birthplace
Alice 20 Aichi
Bob 30 Gifu
Charles 40 Mie
まとめ
pd.read_csv(ファイル名,
header=,
index_col=,
keep_default_na=,
dtype=)
ここまでテンプレと思おう!
デフォルト値を指定してもよいけど、何も考えずデフォル
ト値にするのはやめよう!

More Related Content

PDF
Intoroduction of Pandas with Python
PDF
chapter6
PDF
R言語勉強会#3.pdf
PDF
九大_DS実践_Python基礎その2
PDF
Python for Data Anaysis第2回勉強会4,5章
PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Intoroduction of Pandas with Python
chapter6
R言語勉強会#3.pdf
九大_DS実践_Python基礎その2
Python for Data Anaysis第2回勉強会4,5章
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
式を書くだけで最適化計算してほしい!~CVXPY編~
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説

More from Hiro H. (20)

PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
PDF
PCSじゃないよ、PCAだよ
PDF
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
PDF
シンデレラガールズ声優の増え方まとめ
PDF
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
PDF
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
PDF
C++のライブラリを簡単に眺めてみよう
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
PDF
名古屋市営地下鉄最小距離完乗
PDF
MSYS2使いはじめました
PDF
関数の最小値を求めることから機械学習へ
PDF
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
PDF
rsyncで差分バックアップしようぜ!
PDF
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
PCSじゃないよ、PCAだよ
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
スマホ音楽ゲームの動画から譜面をデータ化したかった
シンデレラガールズ声優の増え方まとめ
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
最近デレステ創作譜面作ってるので技術的な見地から話します
C++のライブラリを簡単に眺めてみよう
デレステの劇場で登場したアイドルの回数の統計取ってます
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
名古屋市営地下鉄最小距離完乗
MSYS2使いはじめました
関数の最小値を求めることから機械学習へ
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
rsyncで差分バックアップしようぜ!
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Ad

pandas便利だけどデフォルトパラメータでファイルを読み込むな!