ZawaWorks’s diary

プログラミング技術メモ

Python : pandasでdf['hoge']が使えないときの対処法

はじめに

自分の研究でデータ分析をするためにpandasを使い始めました.pandasはcsv(tsv)ファイルをdf = pd.read_csv('hoge.csv')(またはread_table)で読み込んで,df['hoge'] という形で指定したカラム(列)を配列として抽出できます.しかし,あるときなぜかそれができませんでした.そこで,そのときの対処法をここでまとめました.

今日使うデータの説明

今回使うデータは以下の通りです.

hoge.csv

id sex name
0 M Yuta
1 F Rikka
2 M Sho

ちなみに表の一番上にあるid, sex, nameのタイトルが書かれているカラムのことをヘッダーといいます.

コード

df pd.read_csv('hoge.csv')

print(df['id'])
print(df['sex'])
print(df['name'])

これがうまくいけば以下のような結果が返ってきます.

実行結果

[0, 1, 2]
[`M`, `F`, `M`]
[`Yuta`, `Rikka`, `Sho`]

read_csvかread_tableかを確認

pandasには 'read_csv' と read_table という二つの命令があります.これらは前者がcsvファイルを読み込むときに使い,後者が read_table ファイルを読み込むときに使います.

read_csv read_table
csv専用 tsv専用

そのため,read_csv('hoge.tsv')read_table('hoge.csv') とすると,ヘッダーが読み込めなくなり,df['id']と呼んでも[0, 1, 2] の配列は返ってきません. ちゃんとread_csv('hoge.csv')read_table('hoge.tsv')になっているか確認しましょう.

index_col=0 またはheader=0を入れる

たとえばread_csv('hoge.csv')をやってもdf['id']が出ない場合,hoge.csvが「ヘッダーがないcsvファイル」として読み込まれている可能性があります.csvファイルには「ヘッダーあり」の場合とありますと「ヘッダーなし」の場合があります.df['id']でカラムを抽出できるのは,ヘッダーありcsvの場合なので,ヘッダーがないcsvだとできません.このとき,ヘッダーありのcsvとして読み込むためには,以下のように書きます.

df = pd.read_csv('hoge.csv', index_col=0)
df = pd.read_csv('hoge.csv', header=0)

index_col = 0は「0行目をindexとして使いますよ」という変数で,header=0は「0行名をヘッダーにするよ」という命令です.これを指定あげることで,「0行目がヘッダーのcsvファイル」として読み込むことができます.