pandasでSeries・DataFrameの作成・変換

pandasでSeries・DataFrameの作成・変換
スポンサーリンク
スポンサーリンク

pandasは、データ解析を容易にする機能を提供するPythonのデータ解析用ライブラリです。
データ分析や機械学習の前処理でよく利用されています。

ここではpandasでSeriesやDataFrameを作成・変換する方法について解説していきます。

スポンサーリンク

使用ライブラリ

pandasは外部ライブラリのため、インストールが必要です

ライブラリ :pandas(公式ドキュメント
インストール:必要

ライブラリのインストール

pip で pandas をインストールします。

 python -m pip install pandas

Successfully installed ・・・・と表示されればインストールは成功です。(依存関係のある他のライブラリも同時にインストールされます)

・関連記事:Pythonライブラリのインストール(pipの使い方)

ライブラリの読み込み

pandas を pd という名前でインポートします。
pd は広く使われていてスタンダードになっているので、この名前を利用する事をおすすめします。

SeriesとDataFrameの違い

Series(シリース)とDataFrame(データフレーム)の違いは以下のようになります。

・Series   :1次元の配列のようなオブジェクト。(DataFrameの1列分)
・DataFrame:テーブル形式のスプレッドシート風のデータ構造で、順序付けられた列を持つ。
        各列(カラム)は別々の型を持たせることができる。

Series(シリーズ)の作成

リストから作成

 Seriesオブジェクト = pd.Series(リスト, index = インデックスのリスト, name = 列名)

引数の index, name (インデックス、列名)は省略が可能です。
インデックスを省略すると 0 から始まる連番でインデックスが自動で付きます。


インデックス、列名を指定する場合は以下のようになります。

辞書から作成

辞書データから Series を作成することもできます。

 Seriesオブジェクト = pd.Series(辞書, index = インデックスのリスト, name = 列名)

インデックスと列名は省略可能です。


指定したインデックスと辞書のキーが一致しない場合は、欠損値となり NaN (Not a Number:非数)が割り当てられます。


Series は、isnull 関数と、notnull 関数をインスタンスメソッドとして持っています。

DataFrame(データフレーム)の作成

DataFrameは、リスト型のデータを持つ辞書をDataFrame関数の引数に渡すことで作成できます。

辞書から作成

DataFrameオブジェクト = pd.DataFrame(辞書型, index = インデックスのリスト)


指定した列がデータを持っていない場合は、その列の値は欠損値となり NaN (Not a Number:非数)が割り当てられます。

配列(リスト)から作成


また、引数 data index columns を指定する方法でも作成できます。

DataFrameオブジェクト = pd.DataFrame(2次元配列, index=インデックスのリスト, columns=列名のリスト)


リストから作成する場合、指定した列がデータを持っていない時は ValueError になります。

ネスト構造の辞書からDataFrame作成

次のように辞書の中に辞書が入っているデータから、DataFrameを作成する方法です。
{key_col: {key0: value0, key1: value1}}

このようなイメージでDataFrameが作成されます。

ネスト構造の辞書からDataFrameを作成

DataFrameとSeriesの変換

厳密には「変換」ではなく、DataFrameから一部をSeriesとして取得したり、SeriesからDataFrameを作成することになります。

例では、以下のDataFrameを使用します。

DataFrameの列からSeriesを取得

DataFrame の1列のみを指定すると Series として抽出されます。

列名で取得

辞書型のように指定するか、属性指定することで取得できます。

抽出したSeriesは、DataFrameが持っていたインデックスと同じインデックスを持ち、Name属性も列名から設定されています。データ型は、元のDataFrame列の型を引き継ぎます。

loc, iloc で取得

loc[]で列名、iloc[]で列番号を指定してもSeriesとして取得できます。


リストやスライスで特定の行を取得することもできます。

DataFrameの行からSeriesを取得

loc, iloc で取得

loc[]で行名、iloc[]で行番号を指定すると Series として取得できます。
Name 属性は行名(インデックス)が設定され、データ型は object になります。
※ pandas-1.0.0(2020年2月)から DataFrame の .ix は廃止されています。


リストやスライスで特定の列を取得することができます。

Series 全体のデータ型は object になりますが、各要素は元のデータ型を保持しています。

DataFrameの列からDataFrameを取得

機械学習のライブラリを利用する際は、DataFrame型の方が扱いやすい事があります。
Series ではなく DataFrame で取得する方法を解説します。

列名で取得

DataFrame として取得したい場合は、1列分の列名をリストで指定する事で取得できます。


複数の列を取得する場合は以下のようになります。

loc, iloc で取得

loc[]で列名、iloc[]で列番号をそのまま指定すると Series になりますが、リストを指定することでDataFrame として取得できます。

または


複数の列を取得する場合は以下のようになります。

または

DataFrameの行からDataFrameを取得

loc[]で行名、iloc[]で行番号をリストで指定すると DataFrame として取得できます。

または


複数の列を取得する場合は以下のようになります。

または

・関連記事:pandas DataFrameからデータを抽出