HOWTO · Python

Python でリストを Pandas DataFrame に変換する

このチュートリアルでは、Python でリストを Pandas DataFrame に変換する方法を紹介します

このページの内容

Python のリストは、pd.DataFrame(my_list) で Pandas DataFrame に変換できます。1 次元のリストを渡すと、既定の整数インデックスが付いた 1 列の DataFrame になります。columns 引数で列名を指定し、index 引数で行ラベルを設定できます。複数列の表を作る場合は、リストのリストを渡します。

Python でリストを Pandas DataFrame に変換する

DataFrame は、行と列にラベルを付けられる 2 次元の表です。Pandas をインポートし、リストを DataFrame コンストラクターに渡して、結果を変数に代入します。スクリプトでは print(df) を呼び出して表示できます。ノートブックや対話型セッションでは、df と評価するだけで表が表示されます。

次の例では、各名前が 0 という列名の 1 列に格納されます。Pandas は既定で、0 から始まる行ラベルを付けます。pd.DataFrame() は表を作成するコンストラクターであり、リストに対して呼び出すメソッドではありません。データを最初の引数として渡し、columns や index などの名前付き引数で表の構成を指定します。

import pandas as pd

my_list = ["Tom", "Mark", "Tony"]
df = pd.DataFrame(my_list)
print(df)

Python の Pandas DataFrame の列にリストを保存する

DataFrame の作成時に、列名を 1 つ含むリストを columns 引数に渡します。このラベルは列名を指定するもので、行インデックスは変更しません。列名の数は、入力データの列数と一致させてください。

次の例では値の順序はそのままで、既定の列名 0 が Names に置き換わります。

import pandas as pd

my_list = ["Tom", "Mark", "Tony"]
df = pd.DataFrame(my_list, columns=["Names"])
print(df)

Python でリストをインデックス付きのデータフレームに変換する

index 引数で行ラベルを、columns 引数で列ラベルを指定します。各リスト値に対応する行ラベルを 1 つずつ渡してください。指定したラベルは既定の整数インデックスに置き換わり、データ列として追加されるわけではありません。たとえば、1 つ目の値に i.、2 つ目に ii.、3 つ目に iii. が対応します。データに合わせて、日付や商品 ID などのラベルを使うこともできます。

import pandas as pd

my_list = ["Tom", "Mark", "Tony"]
df = pd.DataFrame(
    my_list,
    index=["i.", "ii.", "iii."],
    columns=["Names"],
)
print(df)

Python で zip() を使って 2 つのリストを 1 つの DataFrame にまとめる

Python の zip() は、複数のイテラブルから同じ位置にある値を組み合わせます。組み合わせた行を pd.DataFrame() に渡し、入力リストごとに列名を指定します。次の例では、名前と身長を並行するリストに格納しているため、それぞれの名前と身長が同じ行に並びます。同じ長さのリストであれば、3 つ以上を zip() に渡し、対応する列名を指定することもできます。

zip() は、最も短い入力の値を使い切った時点で処理を終了します。各リストの値がすべての行に必要な場合は、DataFrame を作る前にリストの長さが一致していることを確認してください。

import pandas as pd

name_list = ["Tom", "Mark", "Tony"]
height_list = [150, 151, 152]
rows = zip(name_list, height_list)
df = pd.DataFrame(rows, columns=["Name", "Height"])
print(df)

Python で多次元リストを Pandas DataFrame に変換する

表形式のデータでは、各行を内側のリストとして表し、外側のリストを pd.DataFrame() に渡します。columns には、各行の値に対応する列名を指定します。次の例では、どの内側リストも名前の後に年齢を含むため、2 列、3 行の表になります。

この形式は、すべての行で項目とその順序が同じ場合に適しています。行の値が指定した列名に対応していることを確認してください。レコードごとに項目が異なる場合は、先にデータを一貫した表形式に整えます。

import pandas as pd

info = [["Tom", 18], ["Mark", 25], ["Tony", 68]]
df = pd.DataFrame(info, columns=["Name", "Age"])
print(df)