Skip to main content
 首页 » 编程设计

python之pandas.DataFrame.columns.values.tolist() 和 pandas.DataFrame.columns.tolist() 一样吗

2025年05月04日12bjzhanghao

我们的代码库中都弹出了这两个代码

pandas.DataFrame.columns.values.tolist() 
pandas.DataFrame.columns.tolist() 

这些总是相同的吗?我不确定为什么 values 变体会在它出现的地方弹出,似乎直接 columns.tolist() 就是获取列名所需的全部内容。如果是这种情况,我希望稍微清理一下代码。

有点内省(introspection)似乎表明值只是一些实现细节是一个 numpy.ndarray

>>> import pandas 
>>> d = pandas.DataFrame( { 'a' : [1,2,3], 'b' : [0,1,3]} ) 
>>> d 
   a  b 
0  1  0 
1  2  1 
2  3  3 
>>> type(d.columns) 
<class 'pandas.core.indexes.base.Index'> 
>>> type(d.columns.values) 
<class 'numpy.ndarray'> 
>>> type(d.columns.tolist()) 
<class 'list'> 
>>> type(d.columns.values.tolist()) 
<class 'list'> 
>>> d.columns.values 
array(['a', 'b'], dtype=object) 
>>> d.columns.values.tolist() 
['a', 'b'] 
>>> d.columns 
Index(['a', 'b'], dtype='object') 
>>> d.columns.tolist() 
['a', 'b'] 

请您参考如下方法:

输出是一样的,但是如果真的很大 df 时间是不同的:

np.random.seed(23) 
df = pd.DataFrame(np.random.randint(3, size=(5,10000))) 
df.columns = df.columns.astype(str) 
print (df) 
 
In [90]: %timeit df.columns.values.tolist() 
10000 loops, best of 3: 79.5 µs per loop 
 
In [91]: %timeit df.columns.tolist() 
10000 loops, best of 3: 173 µs per loop 

还使用了不同的函数:

Index.values与 numpy.ndarray.tolist

Index.tolist

谢谢 Mitch另一种解决方案:

In [93]: %timeit list(df.columns.values) 
1000 loops, best of 3: 169 µs per loop