如何在熊猫数据框列中选择一系列值?

Posted

技术标签:

【中文标题】如何在熊猫数据框列中选择一系列值?【英文标题】:How to select a range of values in a pandas dataframe column? 【发布时间】:2016-12-17 11:46:24 【问题描述】:
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

我想为某个列选择一个范围,比如列two。我想选择 -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

?

【问题讨论】:

有更好的选择:df.query('-0.5 &lt;= two &lt; 0.5') @MaxU 谢谢!我没有想到这一点。这很干净 【参考方案1】:

使用betweeninclusive=False 表示严格的不等式:

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

inclusive 参数确定是否包含端点(True&lt;=False&lt;)。这适用于两个标志。如果您想要混合不等式,则需要明确编码:

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

【讨论】:

使用inclusive=False 表示严格的不等式是什么意思?我不确定我是否理解inclusive=Trueinclusive=False 之间的区别? 使用between(-0.5, 0.5)-0.5 &lt; value &lt; 0.5-0.5 = &lt; value &lt; 0.5有什么区别? 注意:第二个表达式中的括号很重要。 它也适用于日期吗? 'df['date'].between(2010-03-01, 2010-05-01, inclusive=False)' 我找到了 sol ***.com/a/29370182/8927035【参考方案2】:

.between 是一个很好的解决方案,但如果您想要更好的控制,请使用:

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

运算符&amp;and 不同。其他运算符是| 对应or~ 对应not。请参阅this discussion 了解更多信息。

你的说法是这样的:

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

因此引发了错误。

【讨论】:

感谢您解释为什么提出ValueError

以上是关于如何在熊猫数据框列中选择一系列值?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较熊猫数据框列中可用的十进制数?

如何在熊猫数据框列中获取 NaN 观察的频率 [重复]

如何迭代熊猫数据框列中的元素?

熊猫如何通过数据框列值获取行索引

在熊猫数据框列中查找非数字值

为啥在一种情况下更改熊猫数据框列中的值很快,而在另一种情况下更改速度很慢?