SlideShare a Scribd company logo
Submit Search
Upload
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
Report
Hiro H.
Researcher at Nagoya, Aichi
Follow
•
0 likes
•
91 views
1
of
13
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
•
0 likes
•
91 views
Download Now
Download to read offline
Report
Technology
Pythonの表形式データ用ライブラリの「pandas」についてです。
Read more
Hiro H.
Researcher at Nagoya, Aichi
Follow
Recommended
式を書くだけで最適化計算してほしい!~CVXPY編~
Hiro H.
100 views
•
12 slides
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
Hiro H.
34 views
•
27 slides
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
Hiro H.
2K views
•
39 slides
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
Hiro H.
2.2K views
•
31 slides
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
Hiro H.
888 views
•
18 slides
PCSじゃないよ、PCAだよ
Hiro H.
1K views
•
39 slides
More Related Content
More from Hiro H.
シンデレラガールズ声優の増え方まとめ
Hiro H.
1.4K views
•
37 slides
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
1K views
•
37 slides
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
611 views
•
9 slides
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
15.1K views
•
20 slides
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
5.6K views
•
25 slides
C++のライブラリを簡単に眺めてみよう
Hiro H.
5.2K views
•
25 slides
More from Hiro H.
(20)
シンデレラガールズ声優の増え方まとめ
Hiro H.
•
1.4K views
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
Hiro H.
•
1K views
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
Hiro H.
•
611 views
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
•
15.1K views
最近デレステ創作譜面作ってるので技術的な見地から話します
Hiro H.
•
5.6K views
C++のライブラリを簡単に眺めてみよう
Hiro H.
•
5.2K views
デレステの劇場で登場したアイドルの回数の統計取ってます
Hiro H.
•
941 views
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Hiro H.
•
8.9K views
名古屋市営地下鉄最小距離完乗
Hiro H.
•
1.1K views
MSYS2使いはじめました
Hiro H.
•
2.9K views
関数の最小値を求めることから機械学習へ
Hiro H.
•
6.1K views
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
Hiro H.
•
4K views
rsyncで差分バックアップしようぜ!
Hiro H.
•
7.8K views
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
Hiro H.
•
3.9K views
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
Hiro H.
•
3.4K views
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
Hiro H.
•
4K views
コンピュータに「最長しりとり」「最短距離でのJR線全線乗り尽くし」を解いてもらった方法
Hiro H.
•
5K views
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Hiro H.
•
6.4K views
Boost.勉強会 #15 札幌 LT「8年間の研究生活でC++書いてて大変だったことベスト3」
Hiro H.
•
2.1K views
C++用将棋ライブラリ"OpenShogiLib"の紹介
Hiro H.
•
5K views
Recently uploaded
JJUG CCC.pptx
Kanta Sasaki
6 views
•
14 slides
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
157 views
•
63 slides
DLゼミ: MobileOne: An Improved One millisecond Mobile Backbone
harmonylab
41 views
•
30 slides
概念モデリングワークショップ 設計編
Knowledge & Experience
10 views
•
37 slides
テストコードってすごい.pptx
cistb220msudou
72 views
•
16 slides
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
6 views
•
34 slides
Recently uploaded
(10)
JJUG CCC.pptx
Kanta Sasaki
•
6 views
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
157 views
DLゼミ: MobileOne: An Improved One millisecond Mobile Backbone
harmonylab
•
41 views
概念モデリングワークショップ 設計編
Knowledge & Experience
•
10 views
テストコードってすごい.pptx
cistb220msudou
•
72 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
•
6 views
概念モデリングワークショップ 基礎編
Knowledge & Experience
•
19 views
さくらのひやおろし2023
法林浩之
•
76 views
01Booster Studio ご紹介資料
ssusere7a2172
•
209 views
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
208 views
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
1.
pandas便利だけど デフォルトパラメータで ファイルを読み込むな! Python東海 #44 (2023.11.18) H.Hiro
[X (Twitter): @h_hiro_]
2.
自己紹介 ◦ H.Hiro (Twitter:
@h_hiro_) ◦ Python東海の初参加は第29回(2016.2.6) ◦ 比較的不定期参加感 ◦ 本業:アルゴリズム作ったりデータ分析したりしてる某 研究員 ◦ ちょっとした処理はPythonで書くことが多いが、パ フォーマンスまで考えたプログラムを書きたいときは C++とかを使うことも
3.
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" を表示
4.
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
5.
pandasの注意点 ◦ 前述の「よきにはからってくれる」点は利点でもあるの だが、しばしば欠点にもなる ◦ すなわち、意図しない変換がなされてしまう ◦
特に、ファイルを読み込む際の引数で、「これはデフォ ルトパラメータにするな!」と私が思うものが結構ある ので紹介します
6.
pandas ◦ ファイルを読み込む関数として、pandas.read_csv を 想定して説明します ◦
read_excelというのもあり、使い方は殆ど同じです ◦ で引数を見るとこんな感じ(めちゃくちゃ多い) https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
7.
デフォルト値のまま使うのに 注意が必要な引数 ◦ header ◦ index_col ◦
na_values / keep_default_na 素性のわからないデータを読み込むときは、追加でこれ も推奨 ◦ dtype
8.
header ◦ ヘッダー(列の名前) ◦ デフォルト: ◦
names引数で列名を別途 与えた場合は、ファイルからは 取得しない ◦ そうでない場合は、ファイルの0行目を利用する ◦ ヘッダーがあるとわかっているファイルを読み込むとき はよいのだが、ファイルのその点を確認してから使うべ きということで、自分は必ず0(0行目を利用)かNone (ファイルからは読み込まない)を指定している Name Age Birthplace Alice 20 Aichi Bob 30 Gifu Charles 40 Mie
9.
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
10.
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
11.
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を指定しておき、無効値が出 ないようにするのが安全
12.
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
13.
まとめ pd.read_csv(ファイル名, header=, index_col=, keep_default_na=, dtype=) ここまでテンプレと思おう! デフォルト値を指定してもよいけど、何も考えずデフォル ト値にするのはやめよう!