【问题标题】:Is pandas.DataFrame.columns.values.tolist() the same as pandas.DataFrame.columns.tolist()pandas.DataFrame.columns.values.tolist() 和 pandas.DataFrame.columns.tolist() 一样吗
【发布时间】:2017-12-22 11:32:11
【问题描述】:

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

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

这些总是相同的吗?我不确定为什么values 变体会在它出现的位置弹出,似乎直接columns.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']

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    输出是相同的,但如果真的很大 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.valuesnumpy.ndarray.tolist

    Index.tolist

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

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

    【讨论】:

    • 很好,我发现这个answer 是关于如何将列标题作为列表获取的问题,并且看起来在某些时候有一个 API 简化。
    • tolist 对于 Index 对象只是调用 list(self.values) 从我可以看到,所以这里看到的性能差异只是 df.columns.values.tolist()list(df.columns.values)
    • 我并不是一定要提倡这种解决方案,我只是想指出list(df.columns.values) 完全等同于df.columns.tolist()。所以这里的性能差异是 list 内置函数与 NumPy 数组 .tolist(),后者似乎更快。
    【解决方案2】:
    d = pandas.DataFrame( { 'a' : [1,2,3], 'b' : [0,1,3]} )
    

    或者你可以简单地做

    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
    

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2014-04-06
      • 2017-11-29
      • 2021-04-14
      • 2020-06-04
      • 2014-03-18
      • 2012-11-26
      • 2010-10-16
      • 2020-04-23
      相关资源
      最近更新 更多