web-dev-qa-db-ja.com

エラー:シリーズの真理値があいまいです-Python pandas

この質問が以前に尋ねられたことは知っていますが、ifステートメントを実行しようとしてエラーが発生します。私はこれを見て link ですが、私の場合はあまり役に立ちませんでした。私のdfsはデータフレームのリストです。

私は以下を試しています、

for i in dfs:
    if (i['var1'] < 3.000):
       print(i)

次のエラーが発生します。

ValueError:Seriesの真理値があいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。

[〜#〜]と[〜#〜]以下を試したところ、同じエラーが発生しました。

for i,j in enumerate(dfs):
    if (j['var1'] < 3.000):
       print(i)

私のvar1データ型はfloat32です。他のlogical演算子と&または|を使用していません。上記のリンクでは、論理演算子を使用していることが原因のようです。 ValueErrorを取得する理由

8
i.n.n.m

これがなぜ起こっているのかを示す小さなデモです:

In [131]: df = pd.DataFrame(np.random.randint(0,20,(5,2)), columns=list('AB'))

In [132]: df
Out[132]:
    A   B
0   3  11
1   0  16
2  16   1
3   2  11
4  18  15

In [133]: res = df['A'] > 10

In [134]: res
Out[134]:
0    False
1    False
2     True
3    False
4     True
Name: A, dtype: bool

そのようなSeriesがTrueであるかどうかを確認しようとすると-Pandasは何をすべきかわかりません:

In [135]: if res:
     ...:     print(df)
     ...:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
...
skipped
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

回避策:

ブール値のシリーズの処理方法を決定できます。たとえば、_allの値がifの場合、TrueTrueを返す必要があります。

In [136]: res.all()
Out[136]: False

または少なくとも1つ値がTrueの場合:

In [137]: res.any()
Out[137]: True

In [138]: if res.any():
     ...:     print(df)
     ...:
    A   B
0   3  11
1   0  16
2  16   1
3   2  11
4  18  15
7
MaxU

現在、シリーズ全体を選択して比較しています。シリーズから個別の値を取得するには、次のように何かを使用する必要があります。

for i in dfs:
if (i['var1'].iloc[0] < 3.000):
   print(i)

個々の要素をそれぞれ比較するには、次のように series.iteritems (これはドキュメントがまばらです)を使用できます。

for i in dfs:
    for _, v in i['var1'].iteritems():
        if v < 3.000:
            print(v)

ほとんどの場合、ここでのより良い解決策は、次のように、必要なものに使用するデータフレームのサブセットを選択することです。

for i in dfs:
    subset = i[i['var1'] < 3.000]
    # do something with the subset

pandasでのパフォーマンスは、個々の値を反復処理する代わりに系列演算を使用すると、大きなデータフレームではるかに高速になります。詳細については、pandas- 選択に関するドキュメント。

2
Gasvom