Pandasとnumpyの違いや変換について(どっちを使えばいいの?)

今回は、Pyhonでデータを扱う際に使えるととても便利な「Pandas」について、同じくデータを扱う際に使用する代表的なライブラリである「numpy」と比較して解説したいと思います。

「Pandas」の基本については、「Pandasの基本的な使い方について」で解説していますので、そちらをご覧ください。 

目次

1. Pandasとnumpyの違いについて

まずPandasとは、Pythonでデータを扱うためのライブラリで、データを表形式で扱うことができます。

データを扱うライブラリというと、代表的なものにnumpyがありますが、numpyとの違いは下記のようなものです。

pandasとnumpyの違い

  • numpyは全ての要素が同じ型でなければならないがpandasでは様々な型を使用可能
  • pandasではデータに欠損があった場合でもNanとして読み込み可能

では、上記点についてそれぞれ解説していきます。 

1.1. numpyとpandasのデータ形式について

下の配列をnumpyとpandasに読み込ませた場合、以下のようになります。

12345

numpyではすべての要素が同じ型でなければならないため、1行目の数字も文字として読み込まれます。

pandasでは様々な型が混在可能なので、1行目は整数、2行目は文字として読み込むことができます。

 

実際にコードを動かして確認してみましょう。

import numpy as np
import pandas as pd
#配列の作成
data = [[1,2,3,4,5],["あ","い","う","え","お"]]
#numpy形式での読み込み
ndata = np.array(data)
print(ndata[0,2], type(ndata[0,2]))
#pandas形式での読み込み
pdata = pd.DataFrame(data)
print(pdata.iloc[0,2], type(pdata.iloc[0,2]))

上のコードを実行すると、同じ「3」を出力した場合でも、numpyは文字(str)で出力され、pandasでは整数(int)で出力されていますね。

このように、pandasでは要素ごとに違う形式のデータを扱うことができます。 

1.2. 欠損があるデータの読み込みについて

次に、データに欠損がある場合についてです。

下のような欠損(空白)のある「input.csv」というcsvデータを用意し、「numpy」と「pandas」でそれぞれ読み込んでみましょう。

 

では、まず「numpy」を用いたデータの読み込みです。

import numpy as np
data = np.loadtxt("input.csv", delimiter=",", dtype = "unicode")
print(data)

上のコードを実行すると、空白だった部分はそのまま空白として読み込まれます。

空白や文字を含む場合は、「dtype=”unicode”」と記述し、文字として読み込まないとエラーになります。

上記のように、numpyでも一応データを読み込むことができるのですが、欠損があると全体を文字として読み込む必要があり、後のデータ処理で邪魔になります。

 

では、次に「pandas」を用いて読み込んでみましょう。

import pandas as pd
df = pd.read_csv("input.csv", header=0, index_col=0, encoding="SHIFT-JIS")
print(df)

上のコードを実行すると、欠損を「Nan」として読み込むことができます。

「Nan」としてデータを読んでおくと、後にデータの平均を取ったり合計を取ったりする際も、除外できたりと何かと便利です。

また、後で解説しますが、「Nan」としてデータを読み「numpy」へ変換することで、numpy配列でも欠損を扱うことができるようになります。

そして何より、他の値を数値として読み込むことができる点が「numpy」よりも優秀な点です。

 

このように、文字と数字が混じったデータであったり、欠損のあるデータを読み込む際は、「Pandas」を使うことで後のデータ処理を楽に行うことができます!

  • numpyではすべての要素が同じ型の必要あり
  • pandasでは様々な型が混在可能
  • 空白や文字を含むデータを読み込む際は「Pandas」を使用する

2. Pandasとnumpyの変換

先ほど、文字や空白のあるデータを読み込む際は「Pandas」の使用をおすすめしましたが、データは「numpy」で扱いたい等あると思います。 

そこで次に、Pandasとnumpyを相互に変換する方法について解説します。

※「numpy」は計算に特化したライブラリであり、計算は「Pandas」より速いです。 

2.1. Pansasをnumpyに変換する方法

まずは、「Pandas」から「numpy」への変換についてです。

「Pandas」から「numpy」への変換には、「to_numpy」というメソッドを使用します。では、実際に先ほどの「input.csv」を読み込んで変換してみましょう。

import pandas as pd
df = pd.read_csv("input.csv", header=0, index_col=0, encoding="SHIFT-JIS")
data = df.to_numpy()

すると、下のような「data」というnumpy配列が出来たと思います。

ここで重要なのが、「nan」は文字ではなく実数(float64)として読み込まれていることです。

 

下のコードを実行し、「nan」が実数として読み込まれていることを確認しましょう。

print(data[1,1], type(data[1,1]))

つまり、欠損のあるデータは一度「Pandas」で読み込み、その後「numpy」へ変換することで、numpy配列として扱うことができるのです。

 

また、「Pandas」で読み込んだ際の、インデックスやヘッダーは除外されて変換されますので、そういったデータを扱う際も、この方法が良いと思います。

2.2. numpyをPandasに変換する方法

次に、numpyをPandasに変換する方法についてです。

この場合は、pandasの「DataFrame」を使用します。

「DataFrame」の作成方法や使い方については「Pandasの基本的な使い方について」で解説していますので、そちらもご覧ください。

では、実際にコードを動かして確認してみましょう。

import pandas as pd
import numpy as np
data = np.arange(12).reshape(3,4)
df = pd.DataFrame(data)

上のように、「pandas.DataFrame(配列)」とすることでnumpy配列からpandasの配列へ変換することができます。

 

使用頻度としては、「Pandas」から「numpy」への変換の方が高いと思いますので、しっかりと使えるようになりましょう。

  • 「Pandas」から「numpy」への変換には「to_numpy」というメソッドを使用
  • 「to_numpy」では「nan」は文字ではなく実数(float64)として読み込み
  • 欠損のあるデータは一度「Pandas」で読み込みその後「numpy」へ変換する
  • 「numpy」を「Pandas」に変換するにはpandasの「DataFrame」を使用

3. まとめ

今回は、「Pandas」と「numpy」における違いや相互変換について解説しました。

「Pandas」や「numpy」を状況に応じてうまく使い分けることでデータ処理がとても楽になりますので、ぜひマスターしてもらいたいと思います。

このサイトでは初心者の方向けに「Python初心者入門講座」という講座を作っていますので、気になった方はそちらもご覧いただけると幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

このブログを運営している人

非エンジニア職の社会人です。
業務の単純作業が苦手で、何とかしたいと思いプログラミングを習得しました。
このサイトが同じ悩みを抱える人の助けになれば良いなと考えています。

コメント

コメントする

目次