nat*_*002 914 python dataframe pandas
我想从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
Run Code Online (Sandbox Code Playgroud)
我想得到一个如下所示的列表:
>>> header_list
['y', 'gdp', 'cap']
Run Code Online (Sandbox Code Playgroud)
Sim*_*ser 1506
您可以通过执行以下操作将值作为列表获取:
list(my_dataframe.columns.values)
Run Code Online (Sandbox Code Playgroud)
你也可以简单地使用:
list(my_dataframe)
Run Code Online (Sandbox Code Playgroud)
EdC*_*ica 371
有一种内置的方法,性能最高:
my_dataframe.columns.values.tolist()
Run Code Online (Sandbox Code Playgroud)
.columns返回一个.columns.values,.tolist返回一个,Index并且它有一个辅助函数来返回一个.tolist().
编辑
对于那些讨厌打字的人来说,这可能是最短的方法:
my_dataframe.columns.tolist()
Run Code Online (Sandbox Code Playgroud)
teg*_*gan 84
做了一些快速测试,也许不出所料,使用的内置版本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
Run Code Online (Sandbox Code Playgroud)
(我仍然非常喜欢list(dataframe),所以感谢EdChum!)
fix*_*xer 46
它变得更简单(通过熊猫0.16.0):
df.columns.tolist()
Run Code Online (Sandbox Code Playgroud)
将在一个很好的列表中给你列名称.
Ale*_*der 34
>>> list(my_dataframe)
['y', 'gdp', 'cap']
Run Code Online (Sandbox Code Playgroud)
要在调试器模式下列出数据帧的列,请使用列表推导:
>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']
Run Code Online (Sandbox Code Playgroud)
顺便说一下,您只需使用sorted以下命令即可获得排序列表:
>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
Run Code Online (Sandbox Code Playgroud)
Ant*_*pov 18
它很有趣,但df.columns.values.tolist()几乎快了3倍,df.columns.tolist()但我认为它们是相同的:
In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop
In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop
Run Code Online (Sandbox Code Playgroud)
cs9*_*s95 18
很惊讶,到目前为止我还没有看到这个帖子,所以我就把它留在这里。
[*df]和FriendsPython 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
Run Code Online (Sandbox Code Playgroud)
如果你想要一个list....
[*df]
# ['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要一个set,
{*df}
# {'A', 'B', 'C'}
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要一个tuple,
*df, # Please note the trailing comma
# ('A', 'B', 'C')
Run Code Online (Sandbox Code Playgroud)
或者,如果您要将结果存储在某处,
*cols, = df # A wild comma appears, again
cols
# ['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)
...如果您是那种将咖啡转换成打字声音的人,那么,这将更有效地消耗您的咖啡;)
PS:如果性能很重要,那么您最好放弃上述解决方案,而选择
Run Code Online (Sandbox Code Playgroud)df.columns.to_numpy().tolist() # ['A', 'B', 'C']这与Ed Chum的答案类似,但针对v0.24进行了更新,而v0.24
.to_numpy()则首选使用.values。有关更多信息,请参阅 此答案(由我本人)。
视觉检查
由于我已经在其他答案中看到了这一点,因此您可以利用可迭代的拆包(无需显式循环)。
print(*df)
A B C
print(*df, sep='\n')
A
B
C
Run Code Online (Sandbox Code Playgroud)
不要for对可以在一行中完成的操作使用显式循环(列表理解是可以的)。
接下来,using sorted(df) 不会保留列的原始顺序。为此,您应该list(df)改为使用。
接下来,list(df.columns)和list(df.columns.values)差的建议(为当前版本,v0.24)。两者Index(从返回df.columns)和NumPy的阵列(由返回df.columns.values)限定.tolist()方法,该方法是更快和更惯用。
最后,列表化,即,list(df)仅应用作上述方法的简洁替代方案。
Sas*_*ied 16
一个数据帧如下迭代的在对象的"钥匙"的类似字典的约定.
my_dataframe.keys()
Run Code Online (Sandbox Code Playgroud)
创建键/列列表 - 对象方法to_list()和pythonic方式
my_dataframe.keys().to_list()
list(my_dataframe.keys())
Run Code Online (Sandbox Code Playgroud)
DataFrame上的基本迭代返回列标签
[column for column in my_dataframe]
Run Code Online (Sandbox Code Playgroud)
不要将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)
Run Code Online (Sandbox Code Playgroud)
fir*_*ynx 14
对于IPython笔记本中的数据探索,我首选的方法是:
sorted(df)
Run Code Online (Sandbox Code Playgroud)
这将产生易于阅读的按字母顺序排列的列表.
在代码中我发现它更明确
df.columns
Run Code Online (Sandbox Code Playgroud)
因为它告诉其他人读你的代码你在做什么.
小智 8
%%timeit
final_df.columns.values.tolist()
948 ns ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Run Code Online (Sandbox Code Playgroud)
%%timeit
list(final_df.columns)
14.2 µs ± 79.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Run Code Online (Sandbox Code Playgroud)
%%timeit
list(final_df.columns.values)
1.88 µs ± 11.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Run Code Online (Sandbox Code Playgroud)
%%timeit
final_df.columns.tolist()
12.3 µs ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Run Code Online (Sandbox Code Playgroud)
%%timeit
list(final_df.head(1).columns)
163 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1567767 次 |
| 最近记录: |