Python 熊猫选择栏目-最佳习惯和表现

Python 熊猫选择栏目-最佳习惯和表现,python,numpy,pandas,Python,Numpy,Pandas,有许多不同的方法可以选择.DataFrame中的列(行也是如此)。我想知道这是否有什么不同,是否有任何性能和风格的建议 例如,如果我有如下数据帧: import pandas as pd import numpy as np df = pd.DataFrame(data=np.random.random((10,4)), columns=['a','b','c','d']) df.head() 有许多不同的选择方式,例如,列d 1) df['d'] 2) df.loc[:,'d'](其中

有许多不同的方法可以选择.DataFrame中的列(行也是如此)。我想知道这是否有什么不同,是否有任何性能和风格的建议

例如,如果我有如下数据帧:

import pandas as pd
import numpy as np

df = pd.DataFrame(data=np.random.random((10,4)), columns=['a','b','c','d'])
df.head()

有许多不同的选择方式,例如,列
d

  • 1)
    df['d']
  • 2)
    df.loc[:,'d']
    (其中
    df.loc[行索引器,列索引器]
  • 3)
    df.loc[:]['d']
  • 4)
    df.ix[:]['d']
  • 5)
    df.ix[:,'d']

直观地说,我更喜欢2),可能是因为我已经习惯了numpy的
[row\u indexer,column\u indexer]
风格,我会使用
ipython
的神奇函数
%timeit
来找出最佳性能的方法。 结果是:

%timeit df['d']
100000 loops, best of 3: 5.35 µs per loop

%timeit df.loc[:,'d']
10000 loops, best of 3: 44.3 µs per loop

%timeit df.loc[:]['d']
100000 loops, best of 3: 12.4 µs per loop

%timeit df.ix[:]['d']
100000 loops, best of 3: 10.4 µs per loop

%timeit df.ix[:,'d']
10000 loops, best of 3: 53 µs per loop

事实证明,第一种方法比其他方法快得多。

谢谢!我觉得很奇怪,
[:,'e']
[:]['e']
df之间有如此大的差异。loc[:]是df
。因此
df.loc[:]['d']
本质上是
df['d']
,额外的开销是
df.loc[:]
。我想强调的是,像
df.loc[:]['d']
这样的“链式索引”是不推荐的!看见对于访问行来说,这没有问题,但是当您同时分配给它时,在某些情况下,这可能是一个问题。