Problembehebung: „rand_“ kann nicht mit einem array vom typ [int64] und einem skalar vom typ [bool] ausgeführt werden.


Ein Fehler, der in Python auftreten kann, ist:

 TypeError :Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]

Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, einen Pandas-DataFrame mithilfe mehrerer Bedingungen zu filtern, aber keine Klammern um jede einzelne Bedingung verwenden können.

Das folgende Beispiel zeigt, wie dieser Fehler in der Praxis behoben werden kann.

So reproduzieren Sie den Fehler

Angenommen, wir haben den folgenden Pandas-DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
print (df)

  team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5
6 B 20 9 9
7 B 28 4 12

Nehmen wir nun an, wir versuchen, den DataFrame so zu filtern, dass nur Zeilen angezeigt werden, in denen die Teamspalte gleich „A“ und die Punktespalte größer als 15 ist:

 #attempt to filter DataFrame
df. loc [df. team == ' A ' & df. points > 15 ]

TypeError :Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]

Wir erhalten eine Fehlermeldung, weil wir nicht jede einzelne Bedingung in Klammern gesetzt haben.

So beheben Sie den Fehler

Um diesen Fehler zu beheben, müssen wir beim Ausführen des Filters lediglich darauf achten, jede einzelne Bedingung in Klammern zu setzen:

 #filter DataFrame
df. loc [(df. team == ' A ') & (df. points > 15 )]

	team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10

Beachten Sie, dass wir den DataFrame erfolgreich filtern können, um nur Zeilen anzuzeigen, in denen Team gleich „A“ und Points größer als 15 ist.

Beachten Sie, dass wir auch jede einzelne Bedingung in Klammern setzen müssen, wenn wir ein oder „|“ verwenden » Operator stattdessen:

 #filter rows where team is equal to 'A' or points is greater than 15
df. loc [( df.team == ' A ') | (df. points > 15 )]

team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
6 B 20 9 9
7 B 28 4 12

Beachten Sie, dass wir erneut Fehler vermeiden.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in Pandas beheben:

So beheben Sie das Problem: Das „Pandas“-Modul verfügt nicht über das „Dataframe“-Attribut
So beheben Sie Folgendes: TypeError: Keine numerischen Daten zum Plotten
So beheben Sie KeyError in Pandas

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert