我想从Pandas DataFrame中获得列标题的列表。DataFrame将来自用户输入,所以我不知道有多少列或它们将被称为什么。

例如,如果我有一个这样的数据帧:

>>> my_dataframe
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7

我会得到一个这样的列表:

>>> header_list
['y', 'gdp', 'cap']

当前回答

我觉得这个问题值得再解释一下。

正如fixxer所指出的,答案取决于您在项目中使用的Pandas版本。这可以通过pd得到。__version__命令。

如果你出于某种原因像我一样(在Debian 8 (Jessie)上我使用0.14.1)使用比0.16.0更老的Pandas版本,那么你需要使用:

df.keys().tolist()因为没有任何df.keys。Columns方法尚未实现。

这个keys方法的优点是,它甚至可以在更新版本的Pandas中工作,因此更加通用。

其他回答

我做了一些快速测试,也许不出意外,使用datafframe .columns.values.tolist()的内置版本是最快的:

In [1]: %timeit [column for column in df]
1000 loops, best of 3: 81.6 µs per loop

In [2]: %timeit df.columns.values.tolist()
10000 loops, best of 3: 16.1 µs per loop

In [3]: %timeit list(df)
10000 loops, best of 3: 44.9 µs per loop

In [4]: % timeit list(df.columns.values)
10000 loops, best of 3: 38.4 µs per loop

(尽管如此,我仍然非常喜欢这个列表(数据框架),所以感谢EdChum!)

正如Simeon Visser的回答,你可以这样做

list(my_dataframe.columns.values)

or

list(my_dataframe) # For less typing.

但我认为最完美的地方是:

list(my_dataframe.columns)

它是明确的,同时不是不必要的长。

即使之前提供的解决方案很好,我也希望像frame.column_names()这样的东西是Pandas中的一个函数,但由于它不是,也许使用下面的语法会很好。通过调用"tolist"函数,它以某种方式保留了您正在以正确的方式使用pandas的感觉:

frame.columns.tolist()

它可以作为my_datafframe。columns。

import pandas as pd

# create test dataframe
df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(2))

list(df.columns)

返回

['A', 'B', 'C']