如何將 Pandas DataFrame 列標題獲取為列表

如何將 Pandas DataFrame 列標題獲取為列表

Pandas 是用於 Python 資料分析的開源軟體包。pandas.DataFrame 是主要的 Pandas 資料結構。它是帶有標籤軸(行和列)的二維表格資料結構。

我們今天來介紹如何從 DataFrame 物件獲取列標題的列表。

我們將在本教程的所有其他程式碼示例中使用相同的如下面定義的 DataFrame 物件。

>>> import pandas
>>> cities = {
...   'name': ['New York', 'Los Angeles', 'Chicago'],
...   'population': [8601186, 4057841, 2679044],
...   'state': ['NY', 'CA', 'IL'],
... }
>>> data_frame = pandas.DataFrame(cities)

獲取 DataFrame 列名的一種方法是迭代 DataFrame 物件本身。DataFrame 迭代器按定義順序返回列名。

>>> for column in data_frame:
...   print(column)
...
name
population
state

當需要將可迭代物件轉換為列表時,可以在其上呼叫 Python 的內建 list 函式。

>>> list(data_frame)
['name', 'population', 'state']

但是,此方法的效能很慢。

>>> from timeit import timeit
>>> timeit(lambda: list(data_frame))
7.818843764999997

我們還可以從 DataFrame.columns 屬性訪問其列。

>>> list(data_frame.columns)
['name', 'population', 'state']

否則,我們可以使用 DataFrame.columns.tolist() 函式來實現相同的目的。

>>> data_frame.columns.tolist()
['name', 'population', 'state']

這兩種方法的效能都不是特別好。

>>> timeit(lambda: list(data_frame.columns))
7.143133517000024
>>> timeit(lambda: data_frame.columns.tolist())
6.064925153999866

遍歷 DataFrame.columns.values 屬性時,事情發生了很大變化。同樣,與 DataFrame 物件和 DataFrame.columns 屬性一樣,我們可以使用它來獲取一系列 DataFrame 列名。

>>> list(data_frame.columns.values)
['name', 'population', 'state']

與以前的方法相比,此方法的效能提高了 5 到 6 倍。

>>> timeit(lambda: list(data_frame.columns.values))
1.301724927000123

但是,如果使用內建 DataFrame.columns.values.tolist() 方法,則可以實現最佳執行時間。

>>> data_frame.columns.values.tolist()
['name', 'population', 'state']
>>> timeit(lambda: data_frame.columns.values.tolist())
0.6860591469999235

如我們所見,這種方法的效能比直接在 DataFrame 物件上進行迭代要好十倍。大多數讀者會對這種效能差異背後的原因感到好奇。

答案隱藏在 DataFrame.columns.values 屬性的資料型別中。這是一個 NumPy 陣列。NumPy 是用於科學計算的 Python 軟體包,維護人員會對其效能進行高度優化。

Pandas 構建在 NumPy 之上,並提供了方便的高階抽象。因此,在較低階別的 NumPy 資料結構上執行直接操作幾乎總是比在 Pandas 較高階別的資料結構上執行類似操作快。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe

相關文章 - Pandas DataFrame

相關文章 - Pandas DataFrame Column