关于python:is pandas.dataframe.columns.values.tolist()与pandas.dataframe.columns.tolist()相同

Is pandas.DataFrame.columns.values.tolist() the same as pandas.DataFrame.columns.tolist()

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

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

这些总是一样的吗?我不知道为什么values变体会出现在它出现的地方,似乎直接的columns.tolist()就是获取列名所需要的。如果是这样的话,我想清理一下代码。

反省一点似乎意味着值只是一些实现细节的numpy.ndarray

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>> 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时间是不同的:

1
2
3
4
5
6
7
8
9
10
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

还使用不同的功能:

带numpy.ndarray.tolist的Index.values

Index.tolist

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

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


1
d = pandas.DataFrame( { 'a' : [1,2,3], 'b' : [0,1,3]} )

或者你可以简单地

1
2
3
4
5
6
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