Pathee engineering blog

世界をしなやかに変えるエンジニアたちのブログ

NumPyとPandasとデータ型について

pythonを用いていろいろなデータを計算し、出力することはよくあることだと思います。 そのためによく使われるのがNumPyPandasというライブラリであり、 そんなNumPyPandasを利用する上で、ややこしいのはこれらのデータ型だと自分は感じました。 今回は、NumPyPandas、そのデータ型であるpandas.DataFramepandas.Seriesnumpy.ndarrayの取り扱いと相互変換の方法についてまとめます。

NumPyとPandasについて

一緒に使われることが多いライブラリですが、当然それぞれの得意領域や担当する処理が異なります。

まずNumPyですが、多次元配列の数値データ処理を得意としたライブラリです。 データ型も数値を主に取り扱いそれ以外の方には対応していません。 が、それを補って余りある演算速度と行列演算の利便性が特徴のライブラリです。

一方、Pandasは様々なデータ形式を同時に扱えるデータフレームと、それらを取り込んだり加工したり集計するのが得意なライブラリです。 NumPyと比較して、時系列データや文字列といったものも取り扱うことができます。

なので、データサイエンスの世界などではPandasで取り込み、加工、数値のみのデータに直したらNumPyで計算処理といったことをすることがよくあり、その関係で一緒に紹介されることが多いのです。 なので状況によってはNumPyだけで事足りる、pandasだけで事足りることもよくあります。

ちなみにPandasは、NumPyを使って作られています。 なので、連携もスムーズにできるのです。

NumPyとPandasで利用するデータ型

以降の処理はjupyter notebookという、実行内容と実行結果をならべて記録しておくことができるツール状で実行しています。

jupyter.org

ただの実行環境なので行なっている処理とは特に関係はありません。

pandas.DataFrame

pandas.pydata.org

pandas.DataFrameは、2次元のラベルが付けされたデータ配列です。 特徴として、列ごとに異なる型を持つことができ、上で示したように数値以外の型ももつこともできます。

pandas.DataFrameに変換できるデータ型は、上でもあげたpandas.Seriesnumpy.ndarrayの他、配列やリスト、タプルや辞書などなど多数存在します。

f:id:pathee:20200512095450p:plain

pandas.DataFramepandas.DataFrameに変換することも可能です。(その場合全く同じものが出力されます)

f:id:pathee:20200512095826p:plain

pandas.Series

pandas.pydata.org

pandas.Seriesは順序を保持し、見出しと名前を持った一次元データです。 pandas.DataFrameの列一つ一つはpandas.Seriesとして取得ができます。

f:id:pathee:20200512100006p:plain

ちなみにpandas.DataFrameの行を取得する場合はスライスを使わないと取得できません。 しかしその場合、型はpandas.DataFrameのままです。

f:id:pathee:20200512121730p:plain

pandas.Seriesを作る場合、 pandas.DataFrameと同じようにnumpy.ndarrayの他、配列やリスト、タプルや辞書などなど変換することができます。

numpy.ndarray

docs.scipy.org

numpy.ndarrayは多次元配列のクラスです。 特徴として、pandas.DataFrameとは異なり同じ型同じ大きさの要素を保つことで作られており、NumPyのもつ高速な行列演算に対応しています。

f:id:pathee:20200512100742p:plain

pandas.DataFramepandas.Seriesvaluesを使うことで、numpy.ndarrayに変換ができます。 その際に見出しなどの情報は欠落することに注意してください。

f:id:pathee:20200512121801p:plain

またnumpy.ndarrayを、listに変換することもできます。 その時はtolist()を用いてください。 (なので、pandas.DataFramepandas.Seriesvalues.tolist()でリストへ変換ができます。)

f:id:pathee:20200512100718p:plain

終わりに

以上がpandas.DataFramepandas.Seriesnumpy.ndarrayの取り扱いと相互変換の方法でした。 それぞれの型が持つ便利なアトリビュートやメソッドはまたの機会にまとめます。