Open filip-komarzyniec opened 3 months ago
Thanks for the report - this is a consequence of having comparisons return pd.NA:
print(pd.NA == 1)
# <NA>
When Python checks "is pd.NA == 1", the result is NA, which Python then evaluates the truthiness of this result, giving you the TypeError as reported. As long as we are returning pd.NA on comparisons, I do not believe anything can be done here.
cc @jorisvandenbossche @phofl
We intend to change this to return false (discussed in Basel), should probably get this into 3.0
take
We intend to change this to return false (discussed in Basel), should probably get this into 3.0
@phofl Would this change only apply for boolean ops or do you anticipating changing the behavior of numerical ops like 1 + pd.NA
as well?
not it's only
bool(pd.NA) that we want to change.
@20revsined this is probably not a good issue for a beginner in pandas
I don't know if my issue is related to this, please remove my comment if not!
I have a function which gives me the following output (pd df):
timestamp | duration | trial_type | blink | message |
---|---|---|---|---|
9199380 | \<NA> | NaN | \<NA> | RECORD_START |
9199345 | 392 | fixation | 0 | NaN |
etc... |
column dtypes are: timestamp Int64 duration Int64 trial_type object blink Int64 message object dtype: object
To be precise: timestamp and duration hold numerics plus nans, trial_type holds strings plus nans, blink holds numerics (0 and 1) plus nans, and message hold strings plus nans.
Now I wrote a unit test to test the output for the first row:
@pytest.mark.parametrize(
"folder, expected",
[("emg", [9199380, pd.NA, np.nan, pd.NA, "RECORD_START"])]
# + *other folders, removed for simplicity*)
def test_physioevents_value(folder, expected, eyelink_test_data_dir):
input_dir = eyelink_test_data_dir / folder
asc_file = asc_test_files(input_dir=input_dir, suffix="*_events")[0]
events = _load_asc_file(asc_file)
events_after_start = _df_events_after_start(events)
physioevents_reordered = _df_physioevents(events_after_start)
physioevents_eye1 = _physioevents_eye1(physioevents_reordered)
assert physioevents_eye1.iloc[0].tolist() == expected
And the list obviously looks like this: [9199380, \<NA>, nan, \<NA>, 'RECORD_START']
I get the following error when running the test:
E AssertionError: assert [9199380, \<NA>...CORD_START'] == [9199380, \<NA>...CORD_START'] E
E (pytest_assertion plugin: representation of details failed: missing.pyx:392: TypeError: boolean value of NA is ambiguous. E Probably an object has a faulty repr.)tests/test_edf2bids.py:670: AssertionError
So I guess I cannot use pd.NA
to check if the value in that field is \<NA>. However, I also cannot check it using "\<NA>", i.e. encoding it as a string.
How I can check if pd.NAs s in the dataframe exist?
I tried changing the dtypes so that every column has the dtype 'object'. However, that's not really what I want.
While somewhat related, this:
How I can check if pd.NAs s in the dataframe exist?
is more of a usage question. Please try asking on StackOverflow first - if you don't get your question resolved in a few days, open a new issue here and link to your SO post. We do this as otherwise we fear our issue tracker would be flooded with usage questions.
Great, thank you for your reply! I already asked on SO a couple of days ago. I'll wait a bit more and then do as you asked if I don't get it resolved otherwise :-)
Pandas version checks
[X] I have checked that this issue has not already been reported.
[X] I have confirmed this bug exists on the latest version of pandas.
[X] I have confirmed this bug exists on the main branch of pandas.
Reproducible Example
Issue Description
checking for
pd.NA
existence in a list results inTypeError: boolean value of NA is ambiguous
.Why is performing
in
operation calls__bool__
method of thepd.NAType
class?Seems a bit similar to the issue regarding incorrect implementation of some operators: https://github.com/pandas-dev/pandas/issues/49828
Expected Behavior
Checking for existence of
pd.NA
type in any container should correctly return eitherTrue
orFalse
Installed Versions