Skip to content

REGR: fillna on datetime64[ns, UTC] column hits RecursionError #38851

Closed
@akrherz

Description

@akrherz

Code Sample

from datetime import datetime, timezone
import pandas as pd

df = pd.DataFrame(range(31))
df["dt"] = pd.date_range("2020/12/01", "2020/12/31", tz="UTC")
df["dt"].iloc[5] = pd.NaT
df["dt"] = df["dt"].fillna(datetime(1980, 1, 1, tzinfo=timezone.utc))

Problem description

pandas 1.2.0 is throwing a RecursionError while attempting to fillna on a datetime64[ns, UTC] column. Same code worked in prior releases.

raceback (most recent call last):
  File "recursion.py", line 7, in <module>
    df["dt"] = df["dt"].fillna(utc(1980, 1, 1, tzinfo=timezone.utc))
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/series.py", line 4433, in fillna
    return super().fillna(
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/generic.py", line 6403, in fillna
    new_data = self._mgr.fillna(
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/managers.py", line 621, in fillna
    return self.apply(
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/managers.py", line 427, in apply
    applied = getattr(b, f)(**kwargs)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 461, in fillna
    return self.split_and_operate(None, f, inplace)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 516, in split_and_operate
    nv = f(mask, new_values, None)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 459, in f
    return block.fillna(value, limit=limit, inplace=inplace, downcast=None)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 461, in fillna
    return self.split_and_operate(None, f, inplace)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 516, in split_and_operate
    nv = f(mask, new_values, None)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 459, in f
    return block.fillna(value, limit=limit, inplace=inplace, downcast=None)
...snipped...
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 441, in fillna
    if self._can_hold_element(value):
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/internals/blocks.py", line 2267, in _can_hold_element
    tipo = maybe_infer_dtype_type(element)
  File "/opt/miniconda3/envs/prod/lib/python3.8/site-packages/pandas/core/dtypes/cast.py", line 924, in maybe_infer_dtype_type
    elif is_list_like(element):
  File "pandas/_libs/lib.pyx", line 1033, in pandas._libs.lib.is_list_like
  File "pandas/_libs/lib.pyx", line 1038, in pandas._libs.lib.c_is_list_like
  File "/opt/miniconda3/envs/prod/lib/python3.8/abc.py", line 98, in __instancecheck__
    return _abc_instancecheck(cls, instance)
RecursionError: maximum recursion depth exceeded in comparison

Expected Output

Output of pd.show_versions()

pd.show_versions()
/opt/miniconda3/envs/prod/lib/python3.8/site-packages/_distutils_hack/init.py:30: UserWarning: Setuptools is replacing distutils.
warnings.warn("Setuptools is replacing distutils.")

INSTALLED VERSIONS

commit : 3e89b4c
python : 3.8.6.final.0
python-bits : 64
OS : Linux
OS-release : 4.18.0-240.8.1.el8_3.x86_64
Version : #1 SMP Fri Dec 4 12:24:03 EST 2020
machine : x86_64
processor : x86_64
byteorder : little
LC_ALL : None
LANG : en_US.UTF-8
LOCALE : en_US.UTF-8

pandas : 1.2.0
numpy : 1.19.4
pytz : 2020.5
dateutil : 2.8.1
pip : 20.3.3
setuptools : 50.0.0.post20200830
Cython : 0.29.21
pytest : 6.2.1
hypothesis : None
sphinx : 3.4.1
blosc : None
feather : None
xlsxwriter : 1.3.7
lxml.etree : 4.6.2
html5lib : 1.1
pymysql : None
psycopg2 : 2.8.6 (dt dec pq3 ext lo64)
jinja2 : 2.11.2
IPython : 7.19.0
pandas_datareader: None
bs4 : 4.9.3
bottleneck : None
fsspec : 0.8.5
fastparquet : None
gcsfs : None
matplotlib : 3.3.3
numexpr : None
odfpy : None
openpyxl : 3.0.5
pandas_gbq : None
pyarrow : None
pyxlsb : None
s3fs : None
scipy : 1.5.3
sqlalchemy : 1.3.22
tables : None
tabulate : None
xarray : 0.16.2
xlrd : 1.2.0
xlwt : 1.3.0
numba : 0.52.0

Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugInternalsRelated to non-user accessible pandas implementationMissing-datanp.nan, pd.NaT, pd.NA, dropna, isnull, interpolateRegressionFunctionality that used to work in a prior pandas versionTimezonesTimezone data dtype

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions