Nonsense, if you understand why df[df.sh ==val] you'll see it's great. If you don't, you can also do df.query("sh == val").
If you type df[df2.sh == val] you will understand why it is not great.
If you type df[df2.sh == val] you will understand why it is not great.