Translate

【pandas】ヘッダーがついているcsvデータはとりあえずpandasで読み込むと楽【csv】


Excelとかcsvのデータをpythonで扱う際にはいろいろなやり方がありますよね。
元々のデフォルトで入っているcsvモジュールを使う場合や、numpyのnp.loadtxt()を使う場合、pandasのpd.read_csv()とか多岐にわたります。

pythonの数ある中のcsvの読み込み方法の中で、どれを使うのが悩みどころではありますが、基本的には、numpyかpandasを使った方法が良いと思います。

その中でもさらに、pandasはnumpyの方法と比べてもかなり融通が利くので、慣れてしまえばこちらの方法を使うのが良いでしょう。

今回は、pandasを使ったpythonでのcsvの読み込み方法について紹介していきたいと思います。

pandasを使ったcsvの読み込み方


pythonでのpandasを使ったcsvの読み込み方は、基本的にはnumpyのnp.loadtxt()とほとんど変わらないです。pandasでcsvの読み込みの際に使うpd.read_csv()では、ヘッダーの値を引数に指定できるので、主にヘッダーが元から入っているcsvデータを扱うのが得意です。

しかも、pandasのデータ形式でcsvデータを読み込む利点として、pandasでcsvを読み取ると、文字データも数字データも、欠損値データも同時に読み込むことができるだけではなく、列数や行数がそれぞれ異なるのものが混在するcsvデータでも簡単に読み込むことができるのが素晴らしい点ですね。

実際に読み込む際のpythonコードはこちらになります。


#必要なパッケージのインポート
import pandas as pd
data =  pd.read_csv('data.csv',sep=",",encoding='utf-8',header=0)

data1 = data['header1']
#header1は実際のcsvデータのヘッダー名
data1_2 = data[['header1','heder2']]
#複数行を含んだ二次元配列の場合の読み込み方


こんな感じでpandasを使ってpythonコードを書いてあげると、各行ごとにデータを抽出することができます。このままの状態だとpandasのデータ形式のままで、numpyの配列を使った解析には不向きです。次のpythonコードでは、これらのpandasの配列をnumpy配列に変換してみましょう。

ヘッダーで読み込むさらなる利点として、ヘッダーで読み込むことによって、抽出する行列の指定番号ミスを防ぐことができるという点があります。大した列数、行数のcsvの場合にはそこまで気になるものではないのですが、csvデータの列数が100列などを超えてくると列番号を指定しようするとずれが生じたり、ミスしたりすることが多く発生します。そういった場合あらかじめヘッダーとして入っている文字列を指定する方法をとっていればこういったミスを減らすことが可能になります。

特にmatlabとpythonを併用して使っている方の場合だと、二つのプログラミング言語の間での行列の指定方法が異なるので、そこでのミスが起こりやすいといえます。

#必要なパッケージのインポート


data1 = np.array(data['header1'])
#一行でnumpy配列に変換するやり方
data =  pd.read_csv('data.csv',sep=",",encoding='utf-8',header=0)
data1 = np.array(data)
#二行で書く方法


ここでは二つの方法を例に挙げました。二つ目の方法はpythonコードの行数がかさんでしまうので、最初から一行目のやり方でやってしまうのが良いと思います。pandas特有の行指定の方法とかもあるので、numpyでの行列の扱いに慣れている人であれば、pandasは最初の行列の取り出しだけと割り切ってしまって、そのあとの処理はnumpy配列をつかってしまうのが得策であるといえるでしょう。実際問題、pandasのままでnumpyモジュールの関数を使おうとするとエラーが出るのがほとんどだと思います(本当は調べれば動くのかもしれませんが。。。)。

とはいえpandasも使いこなせるとかなり便利なものだと思います。