BUG: DataFrame.replace fails to replace value when column contains pd.NA
See original GitHub issuePandas version checks
-
I have checked that this issue has not already been reported.
-
I have confirmed this bug exists on the latest version of pandas.
-
I have confirmed this bug exists on the main branch of pandas.
Reproducible Example
import pandas as pd
df = pd.DataFrame({'A': [0, 1, 2]})
print(df)
# A
# 0 0
# 1 1
# 2 2
df['A'].replace(to_replace=2, value=99, inplace=True)
print(df)
# A
# 0 0
# 1 1
# 2 99
df.at[0, 'A'] = pd.NA
df['A'].replace(to_replace=1, value=100, inplace=True)
print(df)
# A
# 0 <NA>
# 1 1 <-- should be 100
# 2 99
Issue Description
Pandas replace function does not seem to work on a column if the column contains at least one pd.NA value
Expected Behavior
replace function should work even if pd.NA values are in the column
Installed Versions
INSTALLED VERSIONS
commit : 66e3805b8cabe977f40c05259cc3fcf7ead5687d python : 3.10.0.final.0 python-bits : 64 OS : Linux OS-release : 5.16.19-76051619-generic Version : #202204081339~1649696161~20.04~091f44b~dev-Ubuntu SMP PREEMPT Tu machine : x86_64 processor : x86_64 byteorder : little LC_ALL : None LANG : en_US.UTF-8 LOCALE : en_US.UTF-8
pandas : 1.3.5 numpy : 1.21.2 pytz : 2021.3 dateutil : 2.8.2 pip : 21.2.4 setuptools : 58.0.4 Cython : None pytest : None hypothesis : None sphinx : None blosc : None feather : None xlsxwriter : 3.0.3 lxml.etree : None html5lib : None pymysql : None psycopg2 : None jinja2 : 3.0.2 IPython : 7.29.0 pandas_datareader: None bs4 : None bottleneck : None fsspec : None fastparquet : None gcsfs : None matplotlib : 3.5.1 numexpr : None odfpy : None openpyxl : 3.0.9 pandas_gbq : None pyarrow : None pyxlsb : None s3fs : None scipy : 1.8.0 sqlalchemy : None tables : None tabulate : None xarray : None xlrd : None xlwt : None numba : None
Issue Analytics
- State:
- Created a year ago
- Comments:19 (11 by maintainers)
Top GitHub Comments
NA = NA is again NA, this happens on purpose
https://en.m.wikipedia.org/wiki/Three-valued_logic
Kleene logic