Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG: Area plot for timedelta raises error _UFuncInputCastingError #52246

Open
2 of 3 tasks
SlowMo24 opened this issue Mar 27, 2023 · 2 comments
Open
2 of 3 tasks

BUG: Area plot for timedelta raises error _UFuncInputCastingError #52246

SlowMo24 opened this issue Mar 27, 2023 · 2 comments
Assignees
Labels
Bug Timedelta Timedelta data type Visualization plotting

Comments

@SlowMo24
Copy link

SlowMo24 commented Mar 27, 2023

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

data = pd.DataFrame(data=pd.timedelta_range(start =pd.Timedelta(0), periods=5, freq="h"))

data.plot.area()
Traceback (most recent call last):
  File "report.py", line 10, in <module>
    data.plot.area()
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_core.py", line 1546, in area
    return self(kind="area", x=x, y=y, stacked=stacked, **kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_core.py", line 981, in __call__
    return plot_backend.plot(data, kind=kind, **kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/__init__.py", line 71, in plot
    plot_obj.generate()
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/core.py", line 449, in generate
    self._make_plot()
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/core.py", line 1383, in _make_plot
    newlines = plotf(
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/core.py", line 1557, in _plot
    y_values = cls._get_stacked_values(ax, stacking_id, y, kwds["label"])
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/core.py", line 1461, in _get_stacked_values
    if (values >= 0).all():
numpy.core._exceptions._UFuncInputCastingError: Cannot cast ufunc 'greater_equal' input 0 from dtype('<m8[ns]') to dtype('<m8') with casting rule 'same_kind'

Issue Description

Creating an area plot of timedeltas fails _UFuncInputCastingError on the main branch. The line plot works fine data.plot.line().

In the latest version of pandas, the line-plot also works fine but the area plot throws:

report.py:10: FutureWarning: The behavior of fillna with timedelta64[ns] dtype and an incompatible value (<class 'int'>) is deprecated. In a future version, this will cast to a common dtype (usually object) instead of raising, matching the behavior of other dtypes.
  data.plot.area()
Traceback (most recent call last):
  File "report.py", line 10, in <module>
    data.plot.area()
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_core.py", line 1557, in area
    return self(kind="area", x=x, y=y, **kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_core.py", line 1000, in __call__
    return plot_backend.plot(data, kind=kind, **kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/__init__.py", line 70, in plot
    plot_obj = PLOT_CLASSES[kind](data, **kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/core.py", line 1529, in __init__
    data = data.fillna(value=0)
  File ".venv/lib/python3.10/site-packages/pandas/util/_decorators.py", line 331, in wrapper
    return func(*args, **kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/core/frame.py", line 5635, in fillna
    return super().fillna(
  File ".venv/lib/python3.10/site-packages/pandas/core/generic.py", line 6922, in fillna
    new_data = self._mgr.fillna(
  File ".venv/lib/python3.10/site-packages/pandas/core/internals/managers.py", line 443, in fillna
    return self.apply(
  File "/.venv/lib/python3.10/site-packages/pandas/core/internals/managers.py", line 352, in apply
    applied = getattr(b, f)(**kwargs)
  File ".venv/lib/python3.10/site-packages/pandas/core/internals/blocks.py", line 1566, in fillna
    res_values = self.values.fillna(value, limit=limit)
  File ".venv/lib/python3.10/site-packages/pandas/core/arrays/_mixins.py", line 346, in fillna
    self._validate_setitem_value(value)
  File ".venv/lib/python3.10/site-packages/pandas/core/arrays/datetimelike.py", line 789, in _validate_setitem_value
    return self._validate_scalar(value, allow_listlike=True)
  File "venv/lib/python3.10/site-packages/pandas/core/arrays/datetimelike.py", line 690, in _validate_scalar
    raise TypeError(msg)
TypeError: value should be a 'Timedelta', 'NaT', or array of those. Got 'int' instead.

This seems to be resolved by #48103 .

Expected Behavior

Plot an area plot, similar to the line plot.

Workaround (from https://stackoverflow.com/questions/23543909/plotting-pandas-timedelta):

Convert the timedelta into a numeric value by dividing by a fixed timedelta of your choice: data = data/pd.Timedelta(hours=1)

Installed Versions

.venv/lib/python3.10/site-packages/_distutils_hack/__init__.py:33: UserWarning: Setuptools is replacing distutils. warnings.warn("Setuptools is replacing distutils.") INSTALLED VERSIONS ------------------ commit : 5c4cc4a python : 3.10.10.final.0 python-bits : 64 OS : Linux OS-release : 5.15.0-67-generic Version : #74~20.04.1-Ubuntu SMP Wed Feb 22 14:52:34 UTC 2023 machine : x86_64 processor : x86_64 byteorder : little LC_ALL : None LANG : de_DE.UTF-8 LOCALE : de_DE.UTF-8 pandas : 2.1.0.dev0+315.g5c4cc4a51c numpy : 1.24.2 pytz : 2022.7.1 dateutil : 2.8.2 setuptools : 65.5.0 pip : 22.3.1 Cython : None pytest : None hypothesis : None sphinx : None blosc : None feather : None xlsxwriter : None lxml.etree : None html5lib : None pymysql : None psycopg2 : None jinja2 : None IPython : None pandas_datareader: None bs4 : None bottleneck : None brotli : None fastparquet : None fsspec : None gcsfs : None matplotlib : 3.7.1 numba : None numexpr : None odfpy : None openpyxl : None pandas_gbq : None pyarrow : None pyreadstat : None pyxlsb : None s3fs : None scipy : None snappy : None sqlalchemy : None tables : None tabulate : None xarray : None xlrd : None zstandard : None tzdata : 2023.2 qtpy : None pyqt5 : None
@SlowMo24 SlowMo24 added Bug Needs Triage Issue that has not been reviewed by a pandas team member labels Mar 27, 2023
@labibaqazi
Copy link

take

@ryanyao2002
Copy link

take

@rhshadrach rhshadrach added Visualization plotting Timedelta Timedelta data type labels Mar 29, 2023
@lithomas1 lithomas1 removed the Needs Triage Issue that has not been reviewed by a pandas team member label May 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Timedelta Timedelta data type Visualization plotting
Projects
None yet
Development

No branches or pull requests

5 participants