df.loc [' col name'],df.loc [index] [' col name']和df.loc [index,' col name'在熊猫?

时间:2017-01-29 12:18:51

标签: python pandas dataframe

我的数据框df的列名为“商店”。如果我想要检索列,则以下行同样有效 - df['Store']df[:]['Store']df[:,'Store']

两者有什么区别?是否应该使用另一个?

谢谢。

1 个答案:

答案 0 :(得分:2)

df.loc[index, 'col name']更具惯用性和首选,特别是如果您想要过滤行

演示:适用于1.000.000 x 3形状DF

In [26]: df = pd.DataFrame(np.random.rand(10**6,3), columns=list('abc'))

In [27]: %timeit df[df.a < 0.5]['a']
10 loops, best of 3: 45.8 ms per loop

In [28]: %timeit df.loc[df.a < 0.5]['a']
10 loops, best of 3: 45.8 ms per loop

In [29]: %timeit df.loc[df.a < 0.5, 'a']
10 loops, best of 3: 37 ms per loop

对于只需要一列但不要过滤df[:]['Store']行的构造 - 最好只使用df['Store']

In [30]: %timeit df[:]['a']
1000 loops, best of 3: 436 µs per loop

In [31]: %timeit df.loc[:]['a']
10000 loops, best of 3: 25.9 µs per loop

In [36]: %timeit df['a'].loc[:]
10000 loops, best of 3: 26.5 µs per loop

In [32]: %timeit df.loc[:, 'a']
10000 loops, best of 3: 126 µs per loop

In [33]: %timeit df['a']
The slowest run took 5.08 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 8.17 µs per loop

多列无条件访问:

In [34]: %timeit df[['a','b']]
10 loops, best of 3: 22 ms per loop

In [35]: %timeit df.loc[:, ['a','b']]
10 loops, best of 3: 22.6 ms per loop