协慌网

登录 贡献 社区

从 pandas DataFrame 列标题中获取列表

我想从 pandas DataFrame 中获取列标题列表。 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]

答案

您可以通过执行以下操作将值作为列表获取:

list(my_dataframe.columns.values)

您也可以简单地使用:(如Ed Chum 的回答所示 ):

list(my_dataframe)

有一种内置的方法,性能最高:

my_dataframe.columns.values.tolist()

.columns返回一个 Index, .columns.values返回一个数组,它有一个辅助函数.tolist来返回一个列表。

如果性能对您不那么重要, Index对象定义了一个可以直接调用的.tolist()方法:

my_dataframe.columns.tolist()

性能差异显而易见:

%timeit df.columns.tolist()
16.7 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

对于那些讨厌打字的人,你可以在df上调用list ,如下所示:

list(df)

做了一些快速测试,也许不出所料,使用dataframe.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

(我仍然非常喜欢list(dataframe) ,所以感谢 EdChum!)