Python pandas.DataFrame.columns.values.tolist()与pandas.DataFrame.columns.tolist()相同吗

Python pandas.DataFrame.columns.values.tolist()与pandas.DataFrame.columns.tolist()相同吗,python,pandas,Python,Pandas,我们的代码库中出现了这两个代码 pandas.DataFrame.columns.values.tolist() pandas.DataFrame.columns.tolist() 这些总是相同的吗?我不确定为什么会在它出现的地方弹出值变量,看起来像是直接的列。获取列名只需tolist()。如果是这样的话,我希望能稍微整理一下代码 稍微反省一下似乎表明,值只是一个numpy.ndarray的一些实现细节 >>> import pandas >>> d = p

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

pandas.DataFrame.columns.values.tolist()
pandas.DataFrame.columns.tolist()
这些总是相同的吗?我不确定为什么会在它出现的地方弹出
变量,看起来像是直接的
列。获取列名只需tolist()
。如果是这样的话,我希望能稍微整理一下代码

稍微反省一下似乎表明,值只是一个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']
导入熊猫 >>>数据帧({'a':[1,2,3],'b':[0,1,3]}) >>>d a b 0 1 0 1 2 1 2 3 3 >>>类型(d列) >>>类型(d.columns.values) >>>类型(d.columns.tolist()) >>>类型(d.columns.values.tolist()) >>>d.价值观 数组(['a','b',dtype=object) >>>d.columns.values.tolist() ['a','b'] >>>d.立柱 索引(['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
还使用不同的功能:

感谢您提供另一个解决方案:

In [93]: %timeit list(df.columns.values)
1000 loops, best of 3: 169 µs per loop
或者你可以简单地做

list(d)# it is same with d.columns.tolist()
Out[327]: ['a', 'b']

#  Time 
% timeit list(df) # after run the time , this is the slowest on my side . 
10000 loops, best of 3: 135 µs per loop

很好,我发现这是一个关于如何将列标题获取为列表的问题,看起来在某个点上有一个API简化。
tolist
对于一个索引对象,我可以看到它只调用
list(self.values)
,所以这里看到的性能差异就是
df.columns.values.tolist()
vs
list(df.columns.values)
。我并不一定支持这种解决方案,我只是想指出
list(df.columns.values)
完全等同于
df.columns.tolist()
。因此,这里的性能差异在于
list
内置函数与NumPy数组
.tolist()
,后者似乎更快。
list(d)# it is same with d.columns.tolist()
Out[327]: ['a', 'b']

#  Time 
% timeit list(df) # after run the time , this is the slowest on my side . 
10000 loops, best of 3: 135 µs per loop