Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当数据帧大小超过100行时,dataframe query()引发错误_Python_Pandas - Fatal编程技术网

Python 当数据帧大小超过100行时,dataframe query()引发错误

Python 当数据帧大小超过100行时,dataframe query()引发错误,python,pandas,Python,Pandas,代码片段1 import pandas as pd df = pd.read_csv("filename.txt", sep='\t', header = 0, names = ['E', 'S', 'D']) Result = df.query(df.E.head(**n=100**) == 0) import pandas as pd df = pd.read_csv("filename.txt", sep='\t', header = 0, names = ['E', 'S'

代码片段1

import pandas as pd  
df = pd.read_csv("filename.txt", sep='\t', header = 0, names = ['E', 'S', 'D'])  
Result = df.query(df.E.head(**n=100**) == 0)
import pandas as pd  
df = pd.read_csv("filename.txt", sep='\t', header = 0, names = ['E', 'S', 'D'])  
Result = df.query(df.E.head(**n=101**) == 0)
代码片段1按预期工作并返回dataframe,其df.E值等于0。 但是,

代码片段2

import pandas as pd  
df = pd.read_csv("filename.txt", sep='\t', header = 0, names = ['E', 'S', 'D'])  
Result = df.query(df.E.head(**n=100**) == 0)
import pandas as pd  
df = pd.read_csv("filename.txt", sep='\t', header = 0, names = ['E', 'S', 'D'])  
Result = df.query(df.E.head(**n=101**) == 0)
代码段2不工作,并引发错误

语法错误:('invalid syntax',('',1602',[True,True ,真的,真的,真的,真的,真的,真的,真的,真的,真的,真的,真的 ,真的,真的,真的,…,真的,真的,真的,真的,真的,真的,真的 ,真的,真的,真的,真的,真的,真的,真的,…\n')) 请注意,两组代码之间的唯一变化是
n=100
n=101


删除
.head(n=101)
后,错误仍然存在。尝试了多个大于
100的值,抛出了相同的错误。

df.query接受字符串查询。您没有传递有效的python(它实际上接受python的一个小超集)。因此,我不希望您的两个代码片段都能正常工作,因此出现了SyntaxError

直接从文档字符串中删除

Parameters
----------
expr : string
    The query string to evaluate.  You can refer to variables
    in the environment by prefixing them with an '@' character like
    ``@a + b``.


In [14]: pd.set_option('max_rows',10)

In [15]: np.random.seed(1234)

In [16]: df = DataFrame(np.random.randint(0,10,size=100).reshape(-1,1),columns=list('a'))

In [17]: df
Out[17]: 
    a
0   3
1   6
2   5
3   4
4   8
.. ..
95  9
96  2
97  9
98  1
99  3

[100 rows x 1 columns]

In [18]: df.query('a==3')
Out[18]: 
    a
0   3
21  3
26  3
28  3
30  3
32  3
51  3
60  3
99  3

In [19]: var = 3

In [20]: df.query('a==@var')
Out[20]: 
    a
0   3
21  3
26  3
28  3
30  3
32  3
51  3
60  3
99  3

你为什么用那种方式使用
query
?你应该传递一个字符串,而不是实际的条件。请参阅。为什么
**
在那里?这是打字错误吗?@BrenBarn实际查询是df.query(df.E==dfEgounique[eachEgo])。如果我将其更改为df.query('df.E==dfEgounique[eachEgo]”),将抛出错误为“NotImplementedError”。@Paul**是在编辑问题时添加的。将删除它。谢谢杰夫。query('e==0')起作用。此外,我想将它与一个变量(而不是0)进行比较,比如df.query('e==var')。谢谢。我一直在尝试df(df.e==var)而不是df[df.e==var]。愚蠢的错误。出于好奇,我确实想知道,如果语法错误,我的第一段代码是如何工作的。根据您提供的信息,不可能知道var是什么(show df.info()和pd.show_versions()version='0.15.0'short_version='0.15.0'var包含int变量)