如何將 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 較高階別的資料結構上執行類似操作快。
相關文章 - Pandas DataFrame
- 如何刪除 Pandas DataFrame 列
- 如何在 Pandas 中將 DataFrame 列轉換為日期時間
- 如何在 Pandas DataFrame 中將浮點數轉換為整數
- 如何按一列的值對 Pandas DataFrame 進行排序
- 如何用 group-by 和 sum 獲得 Pandas 總和