如何将 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