Python 当数据帧大小超过100行时,dataframe query()引发错误
代码片段1Python 当数据帧大小超过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'
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变量)