Python 熊猫选择栏目-最佳习惯和表现
有许多不同的方法可以选择.DataFrame中的列(行也是如此)。我想知道这是否有什么不同,是否有任何性能和风格的建议 例如,如果我有如下数据帧: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'](其中
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']
这样的“链式索引”是不推荐的!看见对于访问行来说,这没有问题,但是当您同时分配给它时,在某些情况下,这可能是一个问题。