Python

Python初心者向け:データの読み込むときのいろんなパターンを解説

スポンサーリンク

はじめに

前回、データ分析の流れについてご紹介しました。このデータ分析の流れは一例ですが、今後、このデータ分析の流れに沿って実践するにあたり必要となる作業をまとめていきます。 ここでは、画像や音声などのデータは扱わず、テーブルデータのみを対象とします。

また、今後Pythonを使った作業となるので、環境が整っていない方は、こちらの記事を参考にして環境構築からはじめてください。

pandasについて

Pythonでテーブルデータを扱うには、pandasというライブラリが必須となります。pandasは、Pythonのデータ解析用のライブラリとなります。まずはpandasを用いたデータの読み込みについてマスターしましょう。もしも、pandasがインストールされていない方がいらっしゃいましたら、pipでインストールしてください。

pip install pandas

pipのコマンドがわからない場合は、以下の記事を参考にするとよいです。

よく使うpipコマンド - Qiita
よく使うpipコマンドのメモ。バージョンを確認する$ pip --versionpip 10.0.1 from ~/.pyenv/versions/3.5.3/lib/python3.5/si…

データの読み込み

では、さっそくデータの読み込み方法を紹介していきます。基本的にはcsvファイルを前提として説明します。

  • ライブラリのインポート
    まずはpandasのインポートから始めます。次のようにしてpandasをインポートしてください。
import pandas  as pd
  • 基本形
    普通に手元に「きれいな」csvファイルがある場合の基本的な読み込み方法です。読み込んだデータを「df」という変数に入れることにしましょう。
# データの読み込み:基本形
df=pd.read_csv('sample.csv')

これで読み込みは完了です。読み込んだデータを見たければ、直接変数名を指定すればOKです。ただ、データサイズが大きい場合もあるので、まずは次のようにデータの先頭5行をみるとよいでしょう。

# データの先頭5行を確認する
df.head()
  • csvのデータにヘッダがない場合
    手に入れたデータにヘッダがない場合があります。このような場合には、ヘッダ行がないことをpandasに伝えないと、一つ目のデータがヘッダとして扱われてしまいます。そこで、次のようにします。
# ヘッダ行がない場合の読み込み
df=pd.read_csv('sample.csv', header=None)

ヘッダ行はあり/なしだけでなく、どこにあるか、を指定することもできます。仮にヘッダ行が10行目にあるのであれば、次のようにすることができます。

# ヘッダ行が10行目にある場合
df=pd.read_csv('sample.csv', header=10)
  • 行をスキップして読み込む場合
    行をスキップして読み込むこともできます。その場合は、次のようにskiprowsというオプションを使いますが、この場合はheader行を指定することはできません。headerがない場合はheader=Noneを指定することができますが、headerがある場合は行を指定することはできず、skipした行の次の行が自動的にheaderとなります。
# 行をスキップして読み込む場合(headerあり)
df=pd.read_csv('sample.csv', skiprows=2)
# 行をスキップして読み込む場合(headerなし)
df=pd.read_csv('sample.csv', skiprows=2, header=None)
  • 行数を指定して読み込む場合
    次に行数を指定して読み込む場合です。この場合は、nrowsオプションを使います。行数を指定した読み込みを行う場合は、headerオプションでheader行の指定を行うこともできます。但し、この場合はheader行以降のデータがnrowsで指定した行数だけ読み込みされます。(header行以前はデータではない、と解釈されるため、読み込みできません。)
# 行数を指定して読み込み(headerあり、headerの指定はなし)
df=pd.read_csv('sample.csv', nrows=2)
# 行数を指定して読み込み(headerあり、headerの指定あり)
df=pd.read_csv('sample.csv', nrows=2, header=5)

上記の2つ目のコードは、csvファイルの5行目をヘッダとして扱い、それ以降の2行をデータとして読み込みます。

  • 列を指定して読み込む場合
    手に入れたデータには、不要な列が含まれている場合もあります。読み込んでから列を削除してもよいですが、明らかに不要なデータであれば、次のように列を指定した読み込みをすることも可能です。
# 列を指定して読み込み(列番号で指定)
df=pd.read_csv('sample.csv', usecols=[1,2,7])
# 列を指定して読み込み(列名で指定)
df=pd.read_csv('sample.csv', usecols=['colname1', 'colname2','colname7'])
  • 文字コードを指定して読み込む場合
    日本語が含まれたデータを扱うときには注意が必要です。pandasでは特に指定しない限り、utf-8としてデータが扱われますが、Windowsから出力されたデータの場合は、shift_jisの場合もあります。この場合、defaultの設定であると文字化けしてしまうため、文字コードを指定して読み込むようにしましょう。
# 文字コードを指定して読み込む場合(cp932)
df=pd.read_csv('sample.csv', encoding='cp932')

cp932というのは、Windows拡張文字列(Windows-31j)のことです。Shift-JISでは拡張文字列は文字化けしてしまうため、初めからcp932を使う癖をつけておくとよいでしょう。この点については、以下のブログを参考にしました。

pandasにexcel出力のcsvを読ませる時に注意する点 - Qiita
pythonに読ませるなら、文字形式はutf-8にして欲しいものですが、データ出力側も色々な事情ありますから、受け側で変換して読み込まなければならないケースも多々あります。Windows&Exc…
  • データ型を指定した読み込み
    データ型が想定と異なってしまうこともあります。そのような場合には、データ型を指定してデータの読み込みをすることもできます。これは、読み込んで、データの概要をつかむ過程で型変換をおこなってもよいですが、一応、紹介しておきます。
# データ型を指定して読み込み
df=pd.read_csv('sample.csv',dtype={'列名':'型(object,int)'})
スポンサーリンク

まとめ

いかがでしたでしょうか?データの読み込み、といっても、いろんなバリエーションがあって、結構奥が深いですね。はじめは特に覚えなくても、データを読み込むときに、なんかうまくいかないな、というときに参考にしていただければと思います。

▶ データを読み込んだら、概要を把握しましょう。

コメント

タイトルとURLをコピーしました