web-dev-qa-db-ja.com

pandas dataframe列の値の範囲を選択するにはどうすればよいですか?

_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
_

13
ShanZhengYang

between with inclusive=Falseを使用して、厳密な不等式を作成します。

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

inclusiveパラメーターは、エンドポイントが含まれるかどうかを決定します(True<=False<)。これは両方の兆候に適用されます。混合不等式が必要な場合は、明示的にコーディングする必要があります。

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

.betweenは良い解決策ですが、より細かな制御が必要な場合はこれを使用します。

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

オペレーター &andとは異なります。他の演算子は| for or~ for not。詳細については この説明 を参照してください。

あなたの声明はこれと同じでした:

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

したがって、エラーが発生しました。

6
Kartik