如何在Pandas Dataframe 列中选择一个值范围?

vx6bjr1n  于 2023-01-19  发布在  其他
关注(0)|答案(3)|浏览(194)
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 Dataframe 列中查找一系列值的正确方法是什么?
编辑:问题
.between()与配合使用

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

就是两者的区别

-0.5 < df['two'] < 0.5

和不平等

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

fivyi3re

fivyi3re1#

betweeninclusive=False配合使用可获得严格不等式:

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

inclusive参数确定是否包括端点(True<=False<)。这适用于两个符号。如果你想要混合不等式,你需要显式地编写它们:

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

qxsslcnc2#

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

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

运算符&and不同。其他运算符是or|not~。有关详细信息,请参见this discussion
你的陈述是这样的:

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

因此引发错误。

zysjyyx4

zysjyyx43#

下面是在不使用between()的情况下获取范围内的值的方法。

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

相关问题