如何在熊猫数据框列中选择一系列值?
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 <= two < 0.5')
@MaxU 谢谢!我没有想到这一点。这很干净
【参考方案1】:
使用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=True
和inclusive=False
之间的区别?
使用between(-0.5, 0.5)
,-0.5 < value < 0.5
和-0.5 = < value < 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)
运算符&
与and
不同。其他运算符是|
对应or
,~
对应not
。请参阅this discussion 了解更多信息。
你的说法是这样的:
(0.5 <= df['two']) and (df['two'] < 0.5)
因此引发了错误。
【讨论】:
感谢您解释为什么提出ValueError
!以上是关于如何在熊猫数据框列中选择一系列值?的主要内容,如果未能解决你的问题,请参考以下文章