HOWTO · Pandas

Pandas の DataFrame 列をリストに変換

この記事では、Pandas の DataFrame のカラムをリストに変換する方法を紹介します。

このページの内容

PythonでPandasのDataFrameを扱う際、DataFrameの列をPythonのリストに変換する必要がよくあります。このプロセスは、さまざまなデータ操作や分析タスクにおいて重要です。幸い、Pandasにはこれを実現するいくつかの方法が用意されており、必要なデータをリスト形式で簡単に抽出できます。

この記事では、PandasのDataFrameの列をPythonのリストに変換するさまざまな方法を紹介します。これらの方法は、名前、生年月日(DOB)、給与の情報を含むサンプルのDataFrameを使って説明します。

import pandas as pd

data = {
    "Name": ["James", "Michelina", "Marc", "Bob", "Halena"],
    "DOB": ["1/1/2014", "2/1/2014", "3/1/2014", "4/1/2014", "4/1/2014"],
    "Salary": ["1000", "12000", "36000", "15000", "12000"],
}

df = pd.DataFrame(data, columns=["Name", "DOB", "Salary"])

tolist()メソッド、list()関数、.valuesプロパティ、リスト内包表記という4つの異なる方法でこの変換を行う方法を紹介します。

tolist() メソッドを使用してDataFrameの列をリストに変換する

PandasのDataFrameの列はPandasのSeriesです。したがって、列をリストに変換する必要がある場合は、Seriesのtolist()メソッドを使用することができます。tolist()は、PandasデータフレームのSeriesをリストに変換します。

以下のコードでは、df['DOB']は、DataFrameから名前がDOBのSeries(列)を返します。

tolist()メソッドは、Seriesをリストに変換します。

import pandas as pd

data = {
    "Name": ["James", "Michelina", "Marc", "Bob", "Halena"],
    "DOB": ["1/1/2014", "2/1/2014", "3/1/2014", "4/1/2014", "4/1/2014"],
    "Salary": ["1000", "12000", "36000", "15000", "12000"],
}

df = pd.DataFrame(data, columns=["Name", "DOB", "Salary"])

print("Pandas DataFrame:\n\n", df, "\n")

list_of_single_column = df["DOB"].tolist()

print(
    "the list of a single column from the dataframe\n",
    list_of_single_column,
    "\n",
    type(list_of_single_column),
)

出力:

Pandas DataFrame:

         Name       DOB Salary
0      James  1/1/2014   1000
1  Michelina  2/1/2014  12000
2       Marc  3/1/2014  36000
3        Bob  4/1/2014  15000
4     Halena  4/1/2014  12000 

the list of a single column from the dataframe
 ['1/1/2014', '2/1/2014', '3/1/2014', '4/1/2014', '4/1/2014'] 
 <class 'list'>

list() 関数を使用してDataFrameの列をリストに変換する

list()関数を使用して、DataFrameの列をリストに変換することもできます。list()が受け取るものに注意してください。DataFrame自体ではなく、list(df["DOB"])のように、選択した列、つまりSeriesです。Seriesを反復処理するとその値が順番に得られるため、list()は列の値を正確に収集します。

このアプローチを示すために、上記と同じデータを使用します。

import pandas as pd

data = {
    "Name": ["James", "Michelina", "Marc", "Bob", "Halena"],
    "DOB": ["1/1/2014", "2/1/2014", "3/1/2014", "4/1/2014", "4/1/2014"],
    "Salary": ["1000", "12000", "36000", "15000", "12000"],
}

df = pd.DataFrame(data, columns=["Name", "DOB", "Salary"])

print("Pandas DataFrame:\n\n", df, "\n")

list_of_single_column = list(df["DOB"])

print(
    "the list of a single column from the dataframe\n",
    list_of_single_column,
    "\n",
    type(list_of_single_column),
)

出力:

Pandas DataFrame:

         Name       DOB Salary
0      James  1/1/2014   1000
1  Michelina  2/1/2014  12000
2       Marc  3/1/2014  36000
3        Bob  4/1/2014  15000
4     Halena  4/1/2014  12000 

the list of a single column from the dataframe
 ['1/1/2014', '2/1/2014', '3/1/2014', '4/1/2014', '4/1/2014'] 
 <class 'list'>

.values プロパティを使用してDataFrameの列をリストに変換する

これを実現するもう一つの方法は、.valuesプロパティを使用することです。

.valuesプロパティを使って、このDataFrameの’Salary’列をPythonのリストに変換する手順を見ていきましょう。

PandasのSeriesの.valuesプロパティは、データのNumPy配列表現を返します。これをPythonのリストに変換するには、.tolist()メソッドを使用します。その方法は次のとおりです。

salary_list = df["Salary"].values.tolist()

以下は完全なコードです。

import pandas as pd

data = {
    "Name": ["James", "Michelina", "Marc", "Bob", "Halena"],
    "DOB": ["1/1/2014", "2/1/2014", "3/1/2014", "4/1/2014", "4/1/2014"],
    "Salary": ["1000", "12000", "36000", "15000", "12000"],
}

df = pd.DataFrame(data, columns=["Name", "DOB", "Salary"])

# Convert the 'Salary' column to a list using .values
salary_list = df["Salary"].values.tolist()

print(salary_list)

出力:

['1000', '12000', '36000', '15000', '12000']

このコードを実行すると、DataFrameのSalary列がPythonのリストに変換され、salary_list変数に格納されます。

リスト内包表記を使用してDataFrameの列をリストに変換する方法

リスト内包表記でも、選択した列を反復処理することでリストを作成できます。それ自体はlist()とまったく同じように値を1つずつコピーします。内包表記の形が真価を発揮するのは、リストを構築しながら各値を変換したりフィルタリングしたりしたい場合です。

# Using list comprehension to convert the 'Salary' column to a list
salary_list = [salary for salary in df["Salary"]]

以下は完全なコードです。

import pandas as pd

data = {
    "Name": ["James", "Michelina", "Marc", "Bob", "Halena"],
    "DOB": ["1/1/2014", "2/1/2014", "3/1/2014", "4/1/2014", "4/1/2014"],
    "Salary": ["1000", "12000", "36000", "15000", "12000"],
}

df = pd.DataFrame(data, columns=["Name", "DOB", "Salary"])

# Using list comprehension to convert the 'Salary' column to a list
salary_list = [salary for salary in df["Salary"]]

print(salary_list)

出力:

['1000', '12000', '36000', '15000', '12000']

結論

この記事では、PandasのDataFrameの列をPythonのリストに変換する4つの異なる方法(tolist()メソッド、list()関数、.valuesプロパティ、リスト内包表記)を紹介しました。

一般的なケース、つまり列があり、その値をリストとして欲しい場合、選択したSeriesをtolist()やlist()で直接変換するのが素直な選択です。.values経由でも、中間のNumPy配列を経て同じリストに到達します。また、リスト内包表記は、リストを構築しながら値を変換したりフィルタリングしたりしたい場合に選ぶ選択肢です。