2019年2月1日金曜日

[Python] pandasの関数read_csv()(read_table())

csvファイルをpandas.DataFrameとして読み込むには,pandasの関数read_csv(),もしくはread_table()を使います.

read_csvとread_tableの違い
pandasの関数pd.read_csv()とpd.read_table()は,デフォルトの区切り文字が違うだけで中身は同じです.

  • read_csv()は区切り文字がカンマ(, )
  • read_table()は区切り文字がタブ(\t)

csvファイル(カンマ区切り)を読み込むときはread_csv()を使用して,tsvファイル(タブ区切り)を読み込むときはread_table()を用います.
また,カンマでもタブでもない場合は,引数(sepかdelimiter)で区切り文字を設定することが可能です.なお,以下の説明ではpd.read_csv()について説明していますが,pd.read_table()でも同様の操作が可能です,
----------
headerがないcsvを読み込むとき

        import pandas as pd
        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', header = 0)

上記の例の「変数名」はデータを格納する変数名を指しているので,任意です.
headerの行番号を指定する命令.デフォルトはheader=0なので、最初の行がheaderの場合は省略しても同じ結果となる.header=Noneとするとpandasが列名を割り当ててくれる.
例えば,2行がヘッダーの場合は,header = 2 と指定すると3行目からデータが読み込まれて,1, 2行は無視される.
----------
indexがあるcsvを読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', index_col=0)

indexとして使いたい列の列番号をindex_col=0のように指定します.
----------
列を指定して読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', header=None, usecols=[a, b])

特定の列だけを読み込む場合には,引数usecolsを使います.usecolsの引数(カッコ内)で読み込む列番号をリストで指定します.一列だけの場合もリストを使います.上記の例では,a列とb列を抜き出すことになります(a, bには0を含む自然数が入ります).
----------
列番号ではなく列名で指定するとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', header = None, usecols = ['c', 'd'])

ただし,これは列名がある時(上記の例ではc, dと言う名前の列がある前提)にしか用いることができません.
index_colと合わせて使う場合はindex_colで指定する列もusecolsで指定しておく必要があります.

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', 
                               index_col = e, usecols = [f, g, h])

この例では,インデックスはe列(大体これは'0'になることが多いと思いますが)で,f, g, h列を抜き出しています.
----------
特定の列を除外して読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                usecols = lambda i: i is not 'j')

無名関数(ラムダ式)を使うと便利です.特に列数が多いファイルから少数の列を除外して読み込みたいたい場合は,読み込む列番号を大量に指定するよりも手間が省けます.
----------
特定の行をスキップして読み込むとき

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', 
                                header = None, skiprows = k)

スキップする行を指定するには,引数skiprowsを使います.
skiprowsに0を含む自然数を渡すと(上記の例では k),ファイルの先頭からスキップする行数を省いて読み込みます.

また,スキップする行番号をリストで指定することも可能です.usecolsと違うのはスキップする行を指定する点です(読み込む行ではない).以下の例ではl行とm行をスキップする命令を行なっています.

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                 header=None, skiprows=[l, m])

なお,一行だけの場合も,以下のようにリストを使います.以下の例では,n行だけをスキップさせています.
        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                 header=None, skiprows=[n])
----------
特定の行だけを読み込む場合
無名関数(ラムダ式)を使用します.当然,行数が多いファイルから特定行だけを読み込みたい場合はスキップする行番号を指定するより手間が減ります).

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv', 
                                 header=None, skiprows=lambda o: o not in [p, q])

なお,headerがあるファイルの場合は,header行も考慮する必要があります.
----------
ファイルの末尾をスキップする場合
引数skipfooterを使って,スキップする行数を整数で指定する。

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                  header = None, skipfooter = r, engine = 'python')

なお,末尾のengine='python'は,警告対策です.
----------
最初の数行だけを読み込む場合
引数nrowsを使って,データの一部分を確認することも可能です.下記の例では最初のs行を確認する命令となっています.

        変数名 = pd.read_csv('読み込むファイルのパス/ファイル名.csv',
                                  header = None, nrows = s)

0 件のコメント :

コメントを投稿