NumPyとPandasとデータ型について
pythonを用いていろいろなデータを計算し、出力することはよくあることだと思います。
そのためによく使われるのがNumPy
とPandas
というライブラリであり、
そんなNumPy
とPandas
を利用する上で、ややこしいのはこれらのデータ型だと自分は感じました。
今回は、NumPy
とPandas
、そのデータ型であるpandas.DataFrame
とpandas.Series
、numpy.ndarray
の取り扱いと相互変換の方法についてまとめます。
NumPyとPandasについて
一緒に使われることが多いライブラリですが、当然それぞれの得意領域や担当する処理が異なります。
まずNumPy
ですが、多次元配列の数値データ処理を得意としたライブラリです。
データ型も数値を主に取り扱いそれ以外の方には対応していません。
が、それを補って余りある演算速度と行列演算の利便性が特徴のライブラリです。
一方、Pandas
は様々なデータ形式を同時に扱えるデータフレームと、それらを取り込んだり加工したり集計するのが得意なライブラリです。
NumPy
と比較して、時系列データや文字列といったものも取り扱うことができます。
なので、データサイエンスの世界などではPandas
で取り込み、加工、数値のみのデータに直したらNumPy
で計算処理といったことをすることがよくあり、その関係で一緒に紹介されることが多いのです。
なので状況によってはNumPy
だけで事足りる、pandas
だけで事足りることもよくあります。
ちなみにPandas
は、NumPy
を使って作られています。
なので、連携もスムーズにできるのです。
NumPyとPandasで利用するデータ型
以降の処理はjupyter notebook
という、実行内容と実行結果をならべて記録しておくことができるツール状で実行しています。
ただの実行環境なので行なっている処理とは特に関係はありません。
pandas.DataFrame
pandas.DataFrame
は、2次元のラベルが付けされたデータ配列です。
特徴として、列ごとに異なる型を持つことができ、上で示したように数値以外の型ももつこともできます。
pandas.DataFrame
に変換できるデータ型は、上でもあげたpandas.Series
、numpy.ndarray
の他、配列やリスト、タプルや辞書などなど多数存在します。
pandas.DataFrame
をpandas.DataFrame
に変換することも可能です。(その場合全く同じものが出力されます)
pandas.Series
pandas.Series
は順序を保持し、見出しと名前を持った一次元データです。
pandas.DataFrame
の列一つ一つはpandas.Series
として取得ができます。
ちなみにpandas.DataFrame
の行を取得する場合はスライスを使わないと取得できません。
しかしその場合、型はpandas.DataFrame
のままです。
pandas.Series
を作る場合、 pandas.DataFrame
と同じようにnumpy.ndarray
の他、配列やリスト、タプルや辞書などなど変換することができます。
numpy.ndarray
numpy.ndarray
は多次元配列のクラスです。
特徴として、pandas.DataFrame
とは異なり同じ型同じ大きさの要素を保つことで作られており、NumPy
のもつ高速な行列演算に対応しています。
pandas.DataFrame
とpandas.Series
はvalues
を使うことで、numpy.ndarray
に変換ができます。
その際に見出しなどの情報は欠落することに注意してください。
またnumpy.ndarray
を、list
に変換することもできます。
その時はtolist()
を用いてください。
(なので、pandas.DataFrame
とpandas.Series
はvalues.tolist()
でリストへ変換ができます。)
終わりに
以上がpandas.DataFrame
とpandas.Series
、numpy.ndarray
の取り扱いと相互変換の方法でした。
それぞれの型が持つ便利なアトリビュートやメソッドはまたの機会にまとめます。