Pie*_*cia 7 python dataframe pandas data-science
嘿,我是Pandas的新手,我刚刚遇到过df.query().
df.query()当您可以使用括号表示法直接过滤Dataframe时,为什么人们会使用?官方的熊猫教程似乎也更喜欢后一种方法.
带括号表示法:
df[df['age'] <= 21]
Run Code Online (Sandbox Code Playgroud)
用pandas查询方法:
df.query('age <= 21')
Run Code Online (Sandbox Code Playgroud)
除了已经提到的一些风格或灵活性差异之外,还有一个规范首选 - 即在大型数据帧上执行操作?
考虑以下示例DF:
In [307]: df
Out[307]:
sex age name
0 M 40 Max
1 F 35 Anna
2 M 29 Joe
3 F 18 Maria
4 F 23 Natalie
Run Code Online (Sandbox Code Playgroud)
偏好.query()方法有很多好理由.
与布尔索引相比,它可能更短更清晰:
In [308]: df.query("20 <= age <= 30 and sex=='F'")
Out[308]:
sex age name
4 F 23 Natalie
In [309]: df[(df['age']>=20) & (df['age']<=30) & (df['sex']=='F')]
Out[309]:
sex age name
4 F 23 Natalie
Run Code Online (Sandbox Code Playgroud)您可以以编程方式准备条件(查询):
In [315]: conditions = {'name':'Joe', 'sex':'M'}
In [316]: q = ' and '.join(['{}=="{}"'.format(k,v) for k,v in conditions.items()])
In [317]: q
Out[317]: 'name=="Joe" and sex=="M"'
In [318]: df.query(q)
Out[318]:
sex age name
2 M 29 Joe
Run Code Online (Sandbox Code Playgroud)PS还有一些缺点:
.query()对包含空格的列或仅由数字组成的列使用方法engine='python'而不是默认engine='numexpr'(这更快)注意:Jeff(Pandas的主要贡献者之一和Pandas核心团队的成员)曾经说过:
请注意,实际上.query只是一个很好的接口,实际上它有非常具体的保证,这意味着它的意思是像查询语言一样解析,而不是完全通用的接口.