I'm sorry to ask this apparently simple question, but I am a python beginner and couln't find an answer anywhere. I want to run a simple if statement, but python returns just:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
No matter which of the given alternatives I apply - it just doesn't work. Do you have any ideas?
import pandas as pd
df = pd.DataFrame({'a': [None] * 4, 'b': [2, 3, 10, 3]})
df["c"] =0
if df.b == 2:
df.c =1
In if
statement you're trying to compare an array with scalar. You can use something like
if df.b[0] == 2:
df.c =1
or
if 2 in df.b:
df.c =1
if you want to check for a specific element in the array.
You can't compare a scalar with an array like that using if
it becomes ambiguous as what if one of the values matches or all but one you want to do something like:
In [3]:
df['c'] = np.where(df['b'] == 2, 1, np.NaN)
df
Out[3]:
a b c
0 None 2 1
1 None 3 NaN
2 None 10 NaN
3 None 3 NaN
using np.where
looks at the whole array for that condition and if True
returns 1
, otherwise NaN
You can perform comparisons using syntax like:
In [4]:
df['b'] == 2
Out[4]:
0 True
1 False
2 False
3 False
Name: b, dtype: bool
but not using if
unless you are comparing a single value:
In [8]:
for index, row in df.iterrows():
if row['b'] == 2:
print('equals 2')
else:
print('some other value')
equals 2
some other value
some other value
some other value
You set df.b
to be a list containing four numbers. It can never equal a single number.
And Pandas cannot handle comparing a list to anything using ==
because it's not clear what answer you want, so it's prompting you to explain.
http://pandas.pydata.org/pandas-docs/stable/gotchas.html
I don't think you are trying to do that at all, but it's not clear what you are expecting to happen.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With