扩展可迭代解包(Python 3.5+): [*df]和Friends
Python 3.5引入了解包泛化(PEP 448)。因此,下面的操作都是可能的。
df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(5))
df
A B C
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
如果你想要一个列表....
[*df]
# ['A', 'B', 'C']
或者,如果你想要一组,
{*df}
# {'A', 'B', 'C'}
如果你想要一个元组,
*df, # Please note the trailing comma
# ('A', 'B', 'C')
或者,如果你想把结果存储在某个地方,
*cols, = df # A wild comma appears, again
cols
# ['A', 'B', 'C']
... 如果你是那种把咖啡转换成打字声音的人,好吧,这将更有效地消耗你的咖啡;)
附注:如果性能很重要,你会想要抛弃
上述解决方案有利于
.tolist df.columns.to_numpy () ()
# [' a ', ' b ', ' c ']
这与Ed Chum的答案相似,但更新了
V0.24,其中.to_numpy()优先于.values的使用。看到
这个答案(由我)为更多的信息。
目视检查
因为我在其他回答中已经看到过这个问题,所以可以使用可迭代解包(不需要显式循环)。
print(*df)
A B C
print(*df, sep='\n')
A
B
C
其他方法的批判
对于可以在单行中完成的操作,不要使用显式for循环(列表推导式是可以的)。
接下来,使用sorted(df)不会保留列的原始顺序。为此,应该使用list(df)。
其次,list(df.columns)和list(df.columns.values)是不好的建议(就当前版本v0.24而言)。Index(从df.columns返回)和NumPy数组(从df.columns.values返回)都定义了.tolist()方法,该方法更快,更习惯。
最后,对于Python 3.4或更早版本,在扩展解包不可用的情况下,应该只使用列表(list(df))作为上述方法的简洁替代。