修正方法: [float64] 型の配列をスカラー型 [bool] と比較できません


pandas の使用時に発生する可能性のあるエラーは次のとおりです。

 TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

このエラーは通常、複数の条件に基づいてデータフレームをサブセット化しようとして、個々の条件を括弧で囲むことができなかった場合に発生します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

次のパンダ データフレームを作成するとします。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'],
                   ' points ': [21, 30, 26, 29, 14, 29, 22, 16]})

#view DataFrame
print (df)

  team position points
0 AG 21
1 AG 30
2 AF26
3AC 29
4 BG 14
5 BF 29
6 BF 22
7 BC 16

ここで、 .loc関数を使用して、チームが「A」に等しく、ポジションが「G」に等しい行のみを表示しようとするとします。

 #attempt to only show rows where team='A' and position='G'
df. loc [df. team == ' A ' & df. position == ' G ']

TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

個々の条件を括弧で囲んでいないため、 ValueError が返されます。

&演算子は==演算子よりも優先されるため、パンダはこのステートメントを正しい順序で解釈できません。

エラーを修正する方法

このエラーを修正する最も簡単な方法は、次のように個々の条件を括弧で囲むだけです。

 #only show rows where team='A' and position='G'
df. loc [(df. team == ' A ') & (df. position == ' G ')]

	team position points
0 A G 21
1 A G 30

ValueErrorを受け取らず、DataFrame のサブセット化に成功していることに注意してください。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

修正方法: 列が重なっていますが、サフィックスが指定されていません
修正方法: オブジェクト列と int64 列をマージしようとしています
修正方法: 列が一致しない行を定義できません

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です