Python pandas.read_csv引数(オプション)まとめ

Python
pandas.read_csv — pandas 2.2.2 documentation

まずは公式ドキュメントのリンクです。これらを噛み砕いて記載していきます。
本記事を通して、各引数(オプション)でどのようなことができるのかをみて言っていただければ幸いです。

「こんなことができる」というのをなんとなくでも知っていれば、必要な時に調べて実行していくことができるかと思います。そんな頭の中の引き出しを、本記事で増やすことができれば嬉しいです。

お目当てのオプションがあるようでしたら、「検索」などをご利用ください

全引数を一挙に確認

まずは全部のオプションを羅列します。公式ドキュメントからの引用となります。

pandas.read_csv(filepath_or_buffer, 
                sep=NoDefault.no_default, 
                delimiter=None, 
                header='infer', 
                names=NoDefault.no_default, 
                index_col=None, 
                usecols=None, 
                squeeze=None, 
                prefix=NoDefault.no_default, 
                mangle_dupe_cols=True, 
                dtype=None, 
                engine=None, 
                converters=None, 
                true_values=None, 
                false_values=None, 
                skipinitialspace=False, 
                skiprows=None, 
                skipfooter=0, 
                nrows=None, 
                na_values=None, 
                keep_default_na=True, 
                na_filter=True, 
                verbose=False, 
                skip_blank_lines=True, 
                parse_dates=None, 
                infer_datetime_format=False, 
                keep_date_col=False, 
                date_parser=None, 
                dayfirst=False, 
                cache_dates=True, 
                iterator=False, 
                chunksize=None, 
                compression='infer', 
                thousands=None, 
                decimal='.', 
                lineterminator=None, 
                quotechar='"', 
                quoting=0, 
                doublequote=True, 
                escapechar=None, 
                comment=None, 
                encoding=None, 
                encoding_errors='strict', 
                dialect=None, 
                error_bad_lines=None, 
                warn_bad_lines=None, 
                on_bad_lines=None, 
                delim_whitespace=False, 
                low_memory=True, 
                memory_map=False, 
                float_precision=None, 
                storage_options=None)

多すぎますね。これだけあればいろんなことができそうな気がしますし、知らないことも大いにあると思いますので、以下の内容もぜひご覧になってください。

重要度などを考慮して各オプションをカテゴライズ

ここからは、各オプションでどのようなことができるのか、言語化して解説したいと思います。それに加えて、各オプションを重要度や使用頻度などからカテゴリー分けして紹介いたします。

カテゴリー分けは筆者の独断ですので、文句がある場合はご連絡いただけますと幸いです。ぜひご意見を取り入れさせていただければと思います。

カテゴリー

★★★・・・知っといた方がいいかも
★★☆・・・場合によっては必要
★☆☆・・・まあ使わないでしょ
☆☆☆・・・非推奨

カテゴリー1(ランク★★★)

pandas.read_csv(filepath_or_buffer, 
                sep=NoDefault.no_default, 
                header='infer', 
                names=NoDefault.no_default, 
                index_col=None, 
                skiprows=None, 
                skipfooter=0, 
                parse_dates=None, 
                encoding=None, 
)
  • sep
    • 区切り文字を文字列で指定する。
    • 本来はcsvですから必要ないはずですよね。これが必要な状況では、ちゃんとcsvにしましょう。
  • header
    • 数値もしくはリストで指定
    • 数値の場合はマルチインデックス
    • データの入っている最初の行(ファイルの1行目ではなく)はheader=0と解釈される
  • names
    • 列名の指定に使用する
    • リストで渡してあげる
  • index_col
    • インデックスとして使用する列を指定する
  • skiprows
    • 読み飛ばす行数を渡してあげる
  • skipfooter
    • 読み込まない最後の行を指定する
    • 例えばエクセルファイルなんかを読み込むときの集計ファイルで合計行を読み飛ばすようなとき
  • parse_dates
    • 日付時刻などに変換する際に使用する
    • 日付データなどはただの文字列となっていることも多いので、それらを日付型に変換する際に多用できる
  • encoding
    • UTF8と指定したりする
    • 調べればいっぱい出てくるので割愛

上記は頻出ですね。仮にpandasの試験があったら、必ず出題されるような感じになります。実際に使用する頻度も高いので使いこなせると非常に頼もしいですね。

カテゴリー2(ランク★★☆)

pandas.read_csv(filepath_or_buffer, 
                usecols=None, 
                mangle_dupe_cols=True, 
                dtype=None, 
                true_values=None, 
                false_values=None, 
                skipinitialspace=False, 
                nrows=None, 
                na_values=None, 
                keep_default_na=True, 
                na_filter=True, 
                skip_blank_lines=True, 
                infer_datetime_format=False, 
                keep_date_col=False, 
                iterator=False, 
                chunksize=None, 
                compression='infer', 
                thousands=None, 
                decimal='.', 
                comment=None, 
                encoding_errors='strict', 
)
  • usecols
    • SQLで言うところのSELECT文的な感じ
    • リストでの指定も可能
  • mangle_dupe_cols
    • 重複列名の処理
    • 勝手によしなにしてくれるので、よっぽどのことがない限りデフォルトのTrueからFalseにする必要は薄そう
  • dtype
    • 列のデータ型を辞書などで指定できるオプション
    • 入っているデータはint型だけどfloat型にしたいなど
  • true_values
    • Trueとみなす値を指定する
    • なんとなく使えそうな気がするけど、今一つ使いどころが分からない
    • 強いて挙げるならデータフレーム内の調査など?
  • false_values
    • Falseとみなす値を指定する
    • なんとなく使えそうな気がするけど、今一つ使いどころが分からない
    • 強いて挙げるならデータフレーム内の調査など?
  • skipinitialspace
    • 区切り文字後のスペースを無視するかどうか
    • スキップしたい場合はTrueにする
  • nrows
    • 読み取る行数を指定する
    • 大規模データに対して使うことが多い
  • na_values
    • 欠損値として扱う値を指定することができる
    • いろんなデータに対して欠損と認識できる
  • keep_default_na
    • na_valuesと絡んでくる
    • デフォルトの欠損値を欠損値として扱うかどうかをboolで渡す
  • na_filter
    • 欠損値を検出するかどうかをbool値で渡す
    • デフォルトはTrueとなっているが、欠損値がないことが保証されているようなデータをFalseで指定すると処理速度が向上する
  • skip_blank_lines
    • 空白の行を読み飛ばすかどうかをbool値で渡す
    • デフォルトはTrueなので読み飛ばしてくれている
  • infer_datetime_format
    • parse_datesで指定した列のデートタイム型を推測してくれる
    • 処理速度の向上も見込めるらしい
  • keep_date_col
    • parse_datesで複数の列を処理に使用した場合にその列をそのまま残す場合にTrueで指定する
  • iterator
    • TextFileReaderオブジェクトとして返すかどうかをbool値で指定する
  • chunksize
    • 行数を指定し、細かく読み込んでTextFileReaderオブジェクトを返す
  • compression
    • 拡張子を指定して、圧縮ファイルを展開して扱う
  • thousands
    • 桁を区切る「,」などを指定できる
  • decimal
    • 小数点を「,」で表現されている場合などに使用する
    • ヨーロッパではそのように表現するところもあるらしいので、そのようなところが起源のデータには注意してみても良いかも
  • comment
    • 指定した文字列を検出するとコメントとして認識されて、データとして検出されなくなる
  • encoding_errors
    • エンコードエラーの取り扱いを教えてくれる

このカテゴリーはボリュームゾーンですね。他と差をつけるならこのカテゴリーのあたりをどれだけ使いこなせるかor知識として持っておくか、かと思います。
次のレベルを目指す方は知っておいて損のないオプションとなっているかと思います。

カテゴリー3(ランク★☆☆)

pandas.read_csv(filepath_or_buffer, 
                delimiter=None, 
                engine=None, 
                converters=None, 
                verbose=False, 
                date_parser=None, 
                dayfirst=False, 
                cache_dates=True, 
                lineterminator=None, 
                quotechar='"', 
                quoting=0, 
                doublequote=True, 
                escapechar=None, 
                dialect=None, 
                on_bad_lines=None, 
                delim_whitespace=False, 
                low_memory=True, 
                memory_map=False, 
                float_precision=None, 
                storage_options=None 
)
  • delimiter
    • sepがあるので使わない可能性が高い
  • engine
    • 演算処理をC言語化かPythonかなどを指定する
    • 最近加わったオプションなのでまだ様子見
  • converters
    • dtypeがあるので使わない可能性が高い
  • verbose
    • 欠損値処理の実行時間を表示する
    • ほぼいらない気がする
  • date_parser
    • 日付型の変換に使用する
    • いまいち使い方がよくわからなかった
  • dayfirst
    • ヨーロッパのフォーマットに合わせるDD/MM型への変換
  • cache_dates
    • キャッシュを利用して日付型を変更する
    • 最近加わったオプションなのでまだ様子見
  • lineterminator
    • 読み込んだcsvの行最後の文字列を指定する
  • quotechar
    • 読み込んだcsvの引用符を指定する
    • 区切り文字を区切り文字として認識させないために使用する
  • quoting
    • 0~3で指定して、その処理方法を指定する
    • その処理方法自体はちょっとよくわからなかった
  • doublequote
    • 「”」を文字列として認識させる
  • escapechar
    • 使える条件が良く分からず・・・
  • on_bad_lines
    • 読み込みに適さない「bad」な行があったときにどのように対処するかを指定する
    • エラーとするか、警告を出すか、スキップするか
  • delim_whitespace
    • sep=’\s+’ と設定するのと同じ
  • low_memory
    • 条件が合えばメモリを省略できそうな感じ
  • memory_map
    • メモリに直接マッピングして処理効率を向上させる
  • float_precision
    • Cエンジンに対して浮動小数点をどのように処理させるかを指定する
    • ほぼ使わなさそう
  • storage_options
    • ストレージサービス(S3やGCSなど)から直接read_csvできるかもしれないオプション
    • 情報がまだ少ない

ここら辺のレベルは筆者も正直使い所がいまひとつわからないものも多数ありました。このレベルは、かなり高度なことをしておりますし、特に処理時間を高速化させる内容がメインかと思います。
これらが要求されるレベルの方々は抑えておくと良いかもしれません。

カテゴリー4(ランク☆☆☆)

pandas.read_csv(filepath_or_buffer,
                squeeze=None, #現行バージョンでは非推奨
                prefix=NoDefault.no_default, #現行バージョンでは非推奨
                error_bad_lines=None, #現行バージョンでは非推奨
                warn_bad_lines=None, #現行バージョンでは非推奨
)

現行のバージョンでは非推奨となっているオプションです。何かのスクリプトなどでこれらのオプションを利用して処理がされている場合はスクリプトの変更を検討した方が良いかもですね。

参照情報

pandas.read_csv — pandas 2.2.2 documentation
pandas/pandas/io/parsers/readers.py at v1.4.2 · pandas-dev/pandas
Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions,...
詳説Pandasのread_csvとread_table関数の使い方
引数が膨大で使い方に迷うPandasのread_csv関数について、この記事ではその引数全てについて解説を行いました。
データサイエンティストの書評ブログ
趣味が読書くらいしかない駆け出しデータサイエンティストの書評ブログです。日々の勉強のアウトプットや趣味の読書のおすすめをしていきます。

コメント