索引操作(.loc)([])和(。)之间的区别是什么

时间:2017-07-27 13:47:38

标签: python pandas

我们以下面的数据框为例:

df = pd.DataFrame({
    'a':[1,2,3,4],
    'b':[2,4,6,8],
    'c':[True,True,False,False]
    })

>df
   a  b      c
0  1  2   True
1  2  4   True
2  3  6  False
3  4  8  False

我有不同的方法来选择列c,其中列c等于True:

第一种方式:

df.loc[df.c == True, 'a']

第二种方式:

df.loc[df['c'] == True, 'a']

第三种方式:

df.a[df['c'] == True]

所有这些都得到相同的结果:

0    1
1    2
Name: a, dtype: int64

还有像df.a[df.c == True]这样的其他操作可以做到。 我只是想知道索引操作(.loc)([])和(。)之间是否有任何区别。

1 个答案:

答案 0 :(得分:1)

在.a和[" a"]之间的pandas中有没有区别但是(@ cricket_007链接),如下所示:In a Pandas DataFrame, what's the difference between using squared brackets or dot to 'cal a column?

然而

使用[]时,您传递的是True和False值列表

[df.c]

<强>打印:

[0     True
 1     True
 2    False
 3    False
 Name: c, dtype: bool]

type([df.c]) #prints 'list'
换句话说,这些是相同的。

df[df.c] 
df[[True,True,False,False]]

这不等于.loc,一个数据帧函数,考虑到你的样本似乎是最快的

%timeit df[df.c].a
1000 loops, best of 3: 437 µs per loop

%timeit df.a[df.c]
1000 loops, best of 3: 387 µs per loop

%timeit df.loc[df.c, 'a'] #equal to df.loc[df["c"], "a"]
1000 loops, best of 3: 210 µs per loop