【Pandas】DataFrameの基本構造

Pandas
この記事は約8分で読めます。

こんにちは、JS2IIUです。Pandasは頻繁に使っています。データを取り扱う時には、基本的な機能だけでも十分に使う価値があるライブラリです。今回も、よろしくお願いします。

PandasのDataFrameは、Pythonでデータ処理を行う際に非常に便利で強力なデータ構造です。この記事では、DataFrameの基本構造とその要素について解説し、DataFrameの要素にアクセスする方法や、構造の理解に役立つサンプルプログラムも紹介します。また、Columns(カラム)を指定しなかった場合にDataFrameがどのようになるのかについても見ていきます。

DataFrameの基本構造と要素

DataFrameは、表形式(スプレッドシートのような形)でデータを格納するための2次元データ構造です。行と列を持ち、各セルには様々なデータ型の値を格納できます。主に以下の3つの要素で構成されています。

  • index: 各行のラベルです。行を特定するために使用します。デフォルトでは整数が設定されますが、任意のラベルを設定することも可能です。
  • columns: 各列のラベルです。カラム名として任意のラベルを設定でき、列を指定するために使用します。
  • values: 実際のデータ(数値や文字列など)で、2次元配列の形で格納されています。

上記のサンプルデータは、Theodore Petrou, Pandas Cookbook – Recipes for Scientific Computing, Time Series Analysis and. Data Visualization using Python の著書データからとっています。この書籍の紹介は、本記事の一番下にあります。

サンプルコード:DataFrameを作成して構造を確認する

次のコードは、サンプルデータを基にDataFrameを作成し、構造を確認する方法を示しています。DataFrameの変数名は、とりあえず適当で良い場合にはdfとすることが多いです。

import pandas as pd

# DataFrameの作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [24, 30, 18],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)

# DataFrameの構造を表示
print("DataFrameの構造を確認")
print("Index:", df.index)
print("Columns:", df.columns)
print("Values:", df.values)

実行結果

DataFrameの構造を確認
Index: RangeIndex(start=0, stop=3, step=1)
Columns: Index(['Name', 'Age', 'City'], dtype='object')
Values: [['Alice' 24 'New York']
         ['Bob' 30 'Los Angeles']
         ['Charlie' 18 'Chicago']]
  • indexRangeIndexで、0から2までの整数が設定されています。
  • columnsIndexオブジェクトで、NameAgeCityがカラム名として設定されています。
  • valuesは2次元配列の形で、各セルにはNameAgeCityに対応するデータが格納されています。

index, columns, valuesのデータ型について

各要素のデータ型についても確認してみましょう。

  • index: PandasのIndexオブジェクトで、行のラベルを保持します。
  • columns: 同じくPandasのIndexオブジェクトで、各列のラベルを保持します。
  • values: Numpyの配列形式(ndarray)で格納されており、異なるデータ型が共存できます。
print("Indexのデータ型:", type(df.index))
print("Columnsのデータ型:", type(df.columns))
print("Valuesのデータ型:", type(df.values))

実行結果

Indexのデータ型: <class 'pandas.core.indexes.range.RangeIndex'>
Columnsのデータ型: <class 'pandas.core.indexes.base.Index'>
Valuesのデータ型: <class 'numpy.ndarray'>

Columnsを指定しなかった場合のDataFrameの構造

DataFrameを作成する際、通常はcolumnsパラメータにカラム名を指定しますが、指定しない場合はPandasが自動的に列名を割り当てます。これは、データソースの形によって異なる挙動を取ります。

例1: リストからDataFrameを作成した場合

リストからDataFrameを作成する場合、カラム名が明示されていないと、自動的に0から始まる整数がカラム名として割り当てられます。

import pandas as pd

# カラムを指定せずにリストからDataFrameを作成
data = [[1, 'Alice'], [2, 'Bob'], [3, 'Charlie']]
df_no_columns = pd.DataFrame(data)

print("Columnsを指定しない場合のDataFrame:")
print(df_no_columns)

実行結果

Columnsを指定しない場合のDataFrame:
   0        1
0  1    Alice
1  2      Bob
2  3  Charlie

この場合、Pandasは各列に0, 1といった整数のカラム名を割り当てています。データの内容に基づいて自動的に列が生成され、0列には数値、1列には文字列が格納されています。

例2: 辞書からDataFrameを作成した場合

辞書からDataFrameを作成する場合、辞書のキーが自動的にカラム名として使用されます。そのため、カラム名を指定しなくても、各キーがカラム名として設定されるため、意味のある名前が自動的に反映されます。

# 辞書からDataFrameを作成
data_dict = {'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie']}
df_from_dict = pd.DataFrame(data_dict)

print("辞書から作成したDataFrame(Columnsを指定しない):")
print(df_from_dict)

実行結果

辞書から作成したDataFrame(Columnsを指定しない):
   id     name
0   1    Alice
1   2      Bob
2   3  Charlie

このように、辞書からDataFrameを作成すると、カラム名として辞書のキーがそのまま設定されます。

DataFrameの作り方色々

PandasでDataFrameにデータを入れ込む方法は様々用意されています。別の記事で紹介していますので、参考にして下さい。

まとめ

PandasのDataFrameは、表形式でデータを保持する強力なデータ構造です。行ラベルを管理するindex、列ラベルを管理するcolumns、そして実際のデータであるvaluesという3つの要素から構成されています。

  • indexは行を特定するためのラベルで、RangeIndexとして整数がデフォルトで設定されます。
  • columnsは列を特定するためのラベルで、任意の名前を設定可能です。
  • valuesは2次元配列で、異なるデータ型の値を含むことができます。

また、Columnsを指定しなかった場合、リストを使用した場合は整数が自動的に列名となり、辞書の場合はキーがそのままカラム名として設定されます。データの構造を理解し、どのように自動設定されるかも確認しておくと、DataFrameの扱いがより簡単になります。

pandas.DataFrame構造説明

参考

少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

コメント

タイトルとURLをコピーしました