Translate

行数、列数の違う配列たちをとりあえずテキストファイル、csvファイルから読み取る方法【numpy、pandas】

もともとpythonのデータ解析では、csvとかのテキストデータの読み込みの部分の所のコードの部分はnumpyをよく使っていたのですが、ここにきてpandasも使いやすいなーと思いはじめました。

特にpandasのいい所としては、なんといっても欠損値だ入っていても大丈夫であったり、文字列とか混じって入っていてもとりあえず読み取れるといった所が挙げられます。

データによってはデータの行列があっていなかったりするとうまくロードできないことが多いことがあって、エラーばかり吐かれてストレスがたまりやすい部分ではあるのですが、pandasを介して読んだ後に加工することでストレスが軽減されてきた印象です。

今回の記事では、pandasを使ったデータの読み込みについて紹介していきたいと思います。


np.loadtxtとかだと文字列とか異なる行列数の処理がイマイチ



csvとかtxtファイルみたいなテキストファイルをnumpyなどで読み取る場合にエラーを吐かれる原因としてよく自分でもやってしまうのが、読み込むテキストファイルに文字列が含まれている場合ですね。

一行目が一律でインデックスに相当する文字列ファイルであればよいのですが、実際にはそういったデータの配列ではないことが多く、実際には途中で変な文字列が入っていたりして、skipheadrでも対応しきれないところがあります。

pandasだとそういったのも関係なくとりあえず読み込んでくれるので便利だなという印象です。

あとよくあるのが、特定の列では10行のデータで、また別な行では11行のデータといった時があります。そういったデータを一気に処理しようとすると行列が合わないとかとエラーを吐かれてしまう、少ない方に合わせてしまうとデータ数が減ってしまうといったジレンマがあります。

pandasを使うとと空白の部分はnanとして埋めてくれるので、とりあえずpandasで読み込んでおけさえすれば、その後に行(もしくは列)毎に抽出することでうまく処理することができます。←これを覚えてからかなり処理が楽になった。

ただ、pandasのデータをそのままだと計算処理がうまくいかないことの方が多いので、その後の計算処理で使うデータに関しては、すぐにnp.array()を使ってnumpy配列に変換してしまいましょう。

大体のpandasのテキストファイルの読み込みはスペース区切り、タブ区切り、カンマ区切り

いろんなソフトウェアから出力されるテキストファイルの形式は大きく分けて小見出しのタイトルの通りスペース区切り、タブ区切り、カンマ区切りがほとんどです(他は今までみたことない)。

一番わかりやすいのはカンマ区切りで、これはいわゆるcsvファイルです。出力される際の拡張子でそうなっていることが多いのでわかりやすいです。

他だとtxtファイルの場合だとスペース区切りのことが多いです。拡張子がtxtファイルなのでこれもわかりやすい。

いちばんわかりにくいのがタブ区切りのファイルで、私がよく見かけるデータとしては、読み込みたいデータファイルが今まで見たことないような変な拡張子(.csvとか.txtじゃない)の時にはこれであることが多いです。

pandasやnumpyで読み込みする時には、テキストファイルのデータの区切り方法に応じて、delimiter  = の所を変えましょう。csvファイルの場合には、delimiter  = ',' 、txtファイルの場合には、delimiter  = ' ' 、タブ区切りのデータの場合には、delimiter  = '\t'としましょう。