如何在pandas数据框列中选择一定范围内的值?

57
import pandas as pd
import numpy as np
data = 'filename.csv'
df = pd.DataFrame(data)
df 

        one       two     three  four   five
a  0.469112 -0.282863 -1.509059  bar   True
b  0.932424  1.224234  7.823421  bar  False
c -1.135632  1.212112 -0.173215  bar  False
d  0.232424  2.342112  0.982342  unbar True
e  0.119209 -1.044236 -0.861849  bar   True
f -2.104569 -0.494929  1.071804  bar  False

我想为某个列选择一个范围,比如说第二列。我希望选择所有值在-0.5到+0.5之间的数据。如何实现这一点?

我预计要使用:

-0.5 < df["two"] < 0.5

但这会导致一个ValueError错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我尝试了

-0.5 (< df["two"] < 0.5)

但是这输出了所有的True
正确的输出应该是:
0    True
1    False
2    False
3    False
4    False
5    True

如何在pandas数据框的列中找到一系列值的正确方法?

编辑:问题

使用.between()函数

df['two'].between(-0.5, 0.5, inclusive=False)

这两个词之间有什么区别呢?

 -0.5 < df['two'] < 0.5

和不等式如

 -0.5 =< df['two'] < 0.5

?


9
有一个更好的替代方案:df.query('-0.5 <= two < 0.5') - MaxU - stand with Ukraine
@MaxU 谢谢您!我没有想到过这一点。这非常干净利落。 - ShanZhengYang
3个回答

90

使用 between 函数,设置 inclusive=False 以进行严格的不等式比较:

df['two'].between(-0.5, 0.5, inclusive=False)

inclusive参数用于确定端点是否包含在内(True表示包含等于号<=False则不包含等于号<)。这适用于两个符号。如果您想使用混合不等式,那么需要明确编写它们的代码:

(df['two'] >= -0.5) & (df['two'] < 0.5)

使用 inclusive=False 表示使用严格不等式,这是什么意思?我不确定 inclusive=Trueinclusive=False 之间的区别。 - ShanZhengYang
使用 between(-0.5, 0.5)-0.5 < value < 0.5-0.5 <= value < 0.5 之间有什么区别? - ShanZhengYang
注意:第二个表达式中的括号很重要。 - Alejandro C De Baca
它也适用于日期吗? 'df ['date'] .between(2010-03-01,2010-05-01,inclusive = False)' 我找到了解决方案https://dev59.com/iF0b5IYBdhLWcg3wSPmL#29370182 - Harsh Gupta

17

.between是一个不错的解决方案,但如果你想要更精细的控制,请使用以下方法:

.between 是一种不错的解决方案,但如果您需要更精细的控制,则可以尝试以下方法:

(0.5 <= df['two']) & (df['two'] < 0.5)

运算符 &and 不同。其他的运算符包括 | 代表or~ 代表 not。欲了解更多信息请参见此讨论

你的陈述与此相同:

(0.5 <= df['two']) and (df['two'] < 0.5)
因此它引发了错误。

1
感谢您解释为什么引发了“ValueError”! - ShanZhengYang

0

以下是不使用between()函数获取范围内的值的方法。

df2 = pd.read_clipboard()
df2["two"][(df2["two"] >= -.5) & (df2["two"] <= .5)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接