Hoe op te lossen in panda's: de waarheidswaarde van een reeks is dubbelzinnig
Een fout die je in Python tegen kunt komen is:
ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
a.any() or a.all().
Deze fout treedt meestal op wanneer u probeert een Panda’s DataFrame te filteren met de woorden en en of in plaats van de tekens & en | de exploitanten.
In deze tutorial wordt uitgelegd hoe u deze fout in de praktijk kunt oplossen.
Hoe de fout te reproduceren
Stel dat we de volgende panda’s DataFrame maken:
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
Stel nu dat we rijen proberen te filteren waarin het team gelijk is aan „A“ en de punten minder dan 20 zijn:
#attempt to filter DataFrame
df[(df[' team '] == ' A ') and (df[' points '] < 20 )]
ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
a.any() or a.all().
Of stel dat we rijen proberen te filteren waarin het team gelijk is aan „A“ of waar de punten minder dan 20 zijn:
#attempt to filter DataFrame
df[(df[' team '] == ' A ') or (df[' points '] < 20 )]
ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
a.any() or a.all().
In beide scenario’s ontvangen we een foutmelding die ons vertelt dat de waarheidswaarde van een reeks dubbelzinnig is.
Hoe u de fout kunt oplossen
Om deze fout bij het filteren te voorkomen, moeten we ervoor zorgen dat we de & en | gebruiken elementen. de exploitanten.
We kunnen bijvoorbeeld de volgende code gebruiken om rijen te filteren waarin team gelijk is aan ‚A‘ en de punten minder dan 20 zijn:
#filter DataFrame
df[(df[' team '] == ' A ') & (df[' points '] < 20 )]
team points assists rebounds
0 A 18 5 11
2 A 19 7 10
3 A 14 9 6
Of we kunnen de volgende code gebruiken om rijen te filteren waarbij het team gelijk is aan „A“ of de punten minder dan 20 zijn:
#filter DataFrame
df[(df[' team '] == ' A ') | (df[' points '] < 20 )]
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
In beide scenario’s krijgen we geen foutmelding omdat we de & en | hebben gebruikt elementen. de exploitanten.
Opmerking : het is belangrijk om haakjes rond elke afzonderlijke voorwaarde op te nemen wanneer u een Panda DataFrame op meerdere voorwaarden filtert, anders ontvangt u een foutmelding.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:
Oplossing: de module “pandas” heeft geen “dataframe” attribuut
Hoe op te lossen in Panda’s: SettingWithCopyWarning
Oplossing in Panda’s: TypeError: geen numerieke gegevens om te plotten