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

当前回答

有一个内置的方法是性能最好的:

my_dataframe.columns.values.tolist()

.columns返回一个索引,.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)

其他回答

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

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

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

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

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

DataFrame遵循类似字典的约定,即遍历对象的“键”。

my_dataframe.keys()

创建一个键/列列表-对象方法to_list()和Pythonic方法:

my_dataframe.keys().to_list()
list(my_dataframe.keys())

DataFrame的基本迭代返回列标签:

[column for column in my_dataframe]

不要将DataFrame转换为列表,只是为了获得列标签。在寻找方便的代码示例时,不要停止思考。

xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) # Compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) # Constant time operation - O(1)

它的简单代码为您:

for i in my_dataframe:
    print(i)

尽管去做

为了快速,简洁,直观的检查,试试这个:

for col in df.columns:
    print col