我们以下面的数据框为例:
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)([])和(。)之间是否有任何区别。
答案 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