我想从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']

当前回答

import pandas as pd

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

list(df.columns)

返回

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

其他回答

如果DataFrame碰巧有一个Index或MultiIndex,你也想把它们包括在列名中:

names = list(filter(None, df.index.names + df.columns.values.tolist()))

它避免调用reset_index(),因为对于这样一个简单的操作,reset_index()会造成不必要的性能损失。

我经常遇到这种情况,因为我从数据库中穿梭数据,其中dataframe索引映射到一个主键/唯一键,但对我来说实际上只是另一个“列”。对于熊猫来说,有一个内置的方法可能是有意义的(完全有可能我错过了它)。

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

frame.columns.tolist()
n = []
for i in my_dataframe.columns:
    n.append(i)
print n

这是达到目标最简单的方法。

my_dataframe.columns.values.tolist ()

如果你很懒,试试这个>

列表(my_dataframe)

%%timeit
final_df.columns.values.tolist()
948 ns ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
list(final_df.columns)
14.2 µs ± 79.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.columns.values)
1.88 µs ± 11.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
final_df.columns.tolist()
12.3 µs ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.head(1).columns)
163 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)