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