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ファイル」として読み込むことができます.