Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 使用逻辑and运算符在Pandas中创建数据帧_Python_Pandas_Jupyter Notebook - Fatal编程技术网

Python 使用逻辑and运算符在Pandas中创建数据帧

Python 使用逻辑and运算符在Pandas中创建数据帧,python,pandas,jupyter-notebook,Python,Pandas,Jupyter Notebook,我有一个带有一些列的数据帧,我首先想只打印那些特定列中的值小于某个值的行。所以我做了: df[df.marks < 4.5] 我如何解决这个问题?起初我还认为它会遍历所有的行,检查真值,然后将行添加到数据帧中,但似乎情况并非如此,如果是这样,它如何将行添加到数据帧中?我以前遇到过这个问题。原因不是100%,但dataframe对象不喜欢同时出现多个条件 df[(df.marks < 4.5 and df.marks > 4)] -> will fail df[(d

我有一个带有一些列的数据帧,我首先想只打印那些特定列中的值小于某个值的行。所以我做了:

df[df.marks < 4.5]

我如何解决这个问题?起初我还认为它会遍历所有的行,检查真值,然后将行添加到数据帧中,但似乎情况并非如此,如果是这样,它如何将行添加到数据帧中?

我以前遇到过这个问题。原因不是100%,但dataframe对象不喜欢同时出现多个条件

  df[(df.marks < 4.5 and df.marks > 4)] -> will fail
df[(df.marks<4.5和df.marks>4)]->将失败
这样做通常能解决问题

  df[(df.marks < 4.5)] [(df.marks > 4)] 
df[(df.marks<4.5)][(df.marks>4]
这个项目目前还不在我的脑海中,但我认为单独引用它们也很有效。

使用

df[(df.marks < 4.5) & (df.marks > 4)]
df[(df.marks<4.5)和(df.marks>4)]
更一般地说,数组逻辑操作使用括号围绕各个条件组合:

(a < b) & (c > d)
(ad)
类似或组合,或超过2种情况


这就是它在NumPy中的设置方式,在数组中使用布尔运算符,Pandas复制了这种行为。

首先,
Evert的解决方案很好

我添加了另外两种可能的解决方案:

。。。与:

。。。与:

df=df.query(“标记<4.5&标记>4”)
打印(df)
标志
0    4.2
2    4.4

@Evert有原因吗?&“起作用”和“不起作用”@ash这是NumPy方面的设计选择。在普通Python中,
可以处理列表:
[1,2,3]和[]
的计算结果为
False
。对于NumPy阵列,这将无法正常工作(您将收到警告)。为了避免混淆,NumPy选择了按位AND运算符,
&
@ash[续]按位运算符通常在其输入的单个位上工作;NumPy数组的等价物是它处理其输入的单个数组元素。他们能得到的最接近的等价物。我认为重写
也有一个问题,但您必须搜索它(以及这些注释的详细信息),因为完整信息太大,无法包含在这个边距^H^H^H^H^H^Hcomment.Hmmm中,
dataframe对象不喜欢同时包含多个条件
-您可以指定吗?是的,现在我明白了。您使用了错误的语法,Evert在注释s中解释了为什么需要
&
。@Evert提供了最佳答案。但请参见上面的示例。条件必须是父母Zed我花了一段时间才知道为什么(df.marks<4.5&df.marks>4)也不起作用。下面的解释很好。
df[(df.marks < 4.5) & (df.marks > 4)]
(a < b) & (c > d)
df = pd.DataFrame({'marks':[4.2,4,4.4,3,4.5]})
print (df)
   marks
0    4.2
1    4.0
2    4.4
3    3.0
4    4.5

df = df[df.marks.between(4,4.5, inclusive=False)]
print (df)
   marks
0    4.2
2    4.4
df = df.query("marks < 4.5 & marks > 4")
print (df)
   marks
0    4.2
2    4.4