pandas: BUG: DataFrame.replace fails to replace value when column contains pd.NA

Pandas 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

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 19 (11 by maintainers)

Most upvoted comments

NA = NA is again NA, this happens on purpose

Is anybody working on this ? Can I investigate ?