从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']
904
18
你可以通过以下方式获得列表中的数值。
也可以简单地使用:(如Ed Chum's answer中所示)。
有一种内置的方法是最能表现的。
.columns
返回一个Index,.columns.values
返回一个数组,这个数组有一个辅助函数.tolist
来返回一个列表。如果性能对你来说不是那么重要,
Index
对象定义了一个.tolist()
方法,你可以直接调用。性能上的差异是显而易见的。
对于那些讨厌打字的人,你可以直接在
df
上调用list
,如是。做了一些快速的测试,也许不出所料,使用
dataframe.columns.values.tolist()
的内置版本是最快的。(不过我还是很喜欢
list(dataframe)
,所以谢谢EdChum!)它变得更简单了(由pandas 0.16.0) 。
会在一个漂亮的列表中给你列名。
要在调试器模式下列出数据框的列,请使用列表理解。
顺便说一下,你可以通过使用
sorted
得到一个排序的列表。这可以作为
my_dataframe.columns
使用。有趣的是,"df.columns.values.tolist() "比 "df.columns.tolist() "快了近3倍,但我认为它们是一样的。
很惊讶我至今没有看到这个帖子,所以我就把这个留在这里。
扩展的可迭代解包(python3.5+)。
[*df]
和朋友们。解包泛化 (PEP 448)已经在 Python 3.5 中被引入。 因此,以下操作都是可能的。
<!- >
如果你想要一个
列表
......。或者,如果你想要一个
套
。或者,如果你想要一个
ttuple
。或者,如果你想把结果存储在某个地方。
... 如果你'是那种将咖啡转换为打字声音的人,那么,这将更有效地消耗你的咖啡;)
>.P.S.: 如果你是那种把咖啡转换成打字声音的人,那么,这将会更有效地消耗你的咖啡;) P.S: 如果性能很重要的话,你会想要抛弃这个。
目测检查 因为我在其他答案中看到过这个问题的讨论,你可以利用可迭代解包(不需要显式循环)。
对其他方法的批评
不要对可以在一行中完成的操作使用显式的
for
循环(List理解也可以)。其次,使用
sorted(df)
不会保留列的原始顺序。 为此,你应该使用list(df)
来代替。其次,
list(df.columns)
和list(df.columns.values)
都是很差的建议(在当前版本,v0.24)。Index
(由df.columns
返回)和NumPy数组(由df.columns.values
返回)都定义了.tolist()
方法,它更快,更习惯。最后,listification,即
list(df)
只能作为上述方法的简明替代方法。一个[DataFrame][1]遵循类似于dict的约定,对对象的 "键 "进行迭代。
创建键/列列表--对象方法 "to_list() "和pythonic方式。
在DataFrame上的[基本迭代][2]返回列标签。
不要为了得到列标签而将DataFrame转换为列表。 不要一边寻找方便的代码样本,一边停止思考。
<!--语言。 python -->
[1]: https://pandas.pydata.org/pandas-docs/stable/api.html#dataframe [2]: http://pandas.pydata.org/pandas-docs/stable/basics.html#iteration
∮在笔记本上∮ 对于IPython笔记本中的数据探索,我的首选方式是这样的。
这将产生一个易于阅读的按字母顺序排列的列表。
##在代码库中
在代码中,我发现更明确的做法是
因为它告诉别人读你的代码的人你在做什么。
由Simeon Visser回答......你可以这样做
或
但我认为大多数的甜蜜点是。
它是明确的,同时也不是不必要的长篇大论。
要想快速、整洁、直观地检查,可以试试这个。
这给了我们一个列表中的列名。
也可以使用另一个函数 tolist() 。
我觉得这个问题值得补充解释。
正如 @fixxxer 所说的,答案取决于你在项目中使用的 pandas 版本。 你可以通过
pd.__version__
命令获得。如果你因为某些原因像我一样(在 debian jessie 上我使用 0.14.1)使用了比 0.16.0 更老的 pandas 版本,那么你需要使用。
df.keys().tolist()
,因为目前还没有实现df.columns
方法。这个keys方法的好处是,它甚至可以在较新版本的pandas中使用,所以它更通用。
尽管上面提供的解决方案很好,但我还是希望像frame.column_names()这样的东西在pandas中是一个函数。 我也希望像frame.column_names()这样的东西在pandas中是一个函数,但是既然它不是,也许使用下面的语法会更好。 通过调用 "tolist",它在某种程度上保留了你以正确方式使用 pandas 的感觉。 函数,从而保留了你使用 pandas 的正确方式。 frame.columns.tolist()
这个解决方案列出了对象my_dataframe的所有列。