Repository: hgrecco/pint-pandas (language: python)

Issue:
Plotting of pandas dataframe
The matplotlib plotting support of pint as shown in the documentation is more or less working (cf. hgrecco/pint#760 - remove the axhline and axvline calls to get it working), however if a pandas dataframe is created using a PintArray as show in the docs, there is another issue:

```python

import pint
import pandas as pd
PA_= pint.PintArray
ureg=pint.UnitRegistry()
ureg.setup_matplotlib()
df = pd.DataFrame({
        "length" : pd.Series([1,2], dtype="pint[m]"),
        "width" : PA_([2,3], dtype="pint[m]")
    })
df.length.plot()
```
This yields a `TypeError: Empty 'DataFrame': no numeric data to plot` . The same error appears if `df.plot()` is issued.

A more matplotlib oriented call:
```
plt.plot('length', data=df)
```
yields a different error: `IndexError: tuple index out of range`

My setup is:
![image](https://user-images.githubusercontent.com/1677740/54119611-0ff15200-43f6-11e9-8abf-f5287b05cc9f.png)

Anyway, thanks for your great work! I really appreciate using pint in my projects.

For completeness, here are the full tracebacks of the errors above:

### `df.length.plot()`
```
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-86-98a16b4be98e> in <module>
      8         "width" : PA_([2,3], dtype="pint[m]")
      9     })
---> 10 df.plot()

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\pandas\plotting\_core.py in __call__(self, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
   2937                           fontsize=fontsize, colormap=colormap, table=table,
   2938                           yerr=yerr, xerr=xerr, secondary_y=secondary_y,
-> 2939                           sort_columns=sort_columns, **kwds)
   2940     __call__.__doc__ = plot_frame.__doc__
   2941 

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\pandas\plotting\_core.py in plot_frame(data, x, y, kind, ax, subplots, sharex, sharey, layout, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, secondary_y, sort_columns, **kwds)
   1968                  yerr=yerr, xerr=xerr,
   1969                  secondary_y=secondary_y, sort_columns=sort_columns,
-> 1970                  **kwds)
   1971 
   1972 

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\pandas\plotting\_core.py in _plot(data, x, y, subplots, ax, kind, **kwds)
   1796         plot_obj = klass(data, subplots=subplots, ax=ax, kind=kind, **kwds)
   1797 
-> 1798     plot_obj.generate()
   1799     plot_obj.draw()
   1800     return plot_obj.result

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\pandas\plotting\_core.py in generate(self)
    247     def generate(self):
    248         self._args_adjust()
--> 249         self._compute_plot_data()
    250         self._setup_subplots()
    251         self._make_plot()

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\pandas\plotting\_core.py in _compute_plot_data(self)
    362         if is_empty:
    363             raise TypeError('Empty {0!r}: no numeric data to '
--> 364                             'plot'.format(numeric_data.__class__.__name__))
    365 
    366         self.data = numeric_data

TypeError: Empty 'DataFrame': no numeric data to plot
```

## `plt.plot('length', data=df)`
```
IndexError                                Traceback (most recent call last)
<ipython-input-80-1c9c8127f2cc> in <module>
----> 1 plt.plot('length', data=df)

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\matplotlib\pyplot.py in plot(scalex, scaley, data, *args, **kwargs)
   2809     return gca().plot(
   2810         *args, scalex=scalex, scaley=scaley, **({"data": data} if data
-> 2811         is not None else {}), **kwargs)
   2812 
   2813 

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs)
   1808                         "the Matplotlib list!)" % (label_namer, func.__name__),
   1809                         RuntimeWarning, stacklevel=2)
-> 1810             return func(ax, *args, **kwargs)
   1811 
   1812         inner.__doc__ = _add_data_doc(inner.__doc__,

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\matplotlib\axes\_axes.py in plot(self, scalex, scaley, *args, **kwargs)
   1609         kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D._alias_map)
   1610 
-> 1611         for line in self._get_lines(*args, **kwargs):
   1612             self.add_line(line)
   1613             lines.append(line)

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\matplotlib\axes\_base.py in _grab_next_args(self, *args, **kwargs)
    391                 this += args[0],
    392                 args = args[1:]
--> 393             yield from self._plot_args(this, kwargs)
    394 
    395 

D:\WinPython-64bit-3.7.2.0\python-3.7.2.amd64\lib\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs)
    376             func = self._makefill
    377 
--> 378         ncx, ncy = x.shape[1], y.shape[1]
    379         if ncx > 1 and ncy > 1 and ncx != ncy:
    380             cbook.warn_deprecated("2.2", "cycling among columns of inputs "

IndexError: tuple index out of range
```


Discussion / hints:
It doesn't look like there's support for ExtensionArrays to plot work with the plotting part of pandas.

For now, you can do df.pint.dequantify().length.plot()
FWIW, this will let it plot, without conversions:

```python3
from pandas.core.dtypes.missing import isna, notna, remove_na_arraylike
from pandas.core.dtypes.generic import (
    ABCDataFrame, ABCIndexClass, ABCMultiIndex, ABCPeriodIndex, ABCSeries)

@classmethod
def _plot(cls, ax, x, y, style=None, is_errorbar=False, **kwds):
    if "pint" in str(y.dtype):
        y=y.quantity
    mask = isna(y)
    if mask.any():
        y = np.ma.array(y)
        y = np.ma.masked_where(mask, y)

    if isinstance(x, ABCIndexClass):
        x = x._mpl_repr()

    if is_errorbar:
        if 'xerr' in kwds:
            kwds['xerr'] = np.array(kwds.get('xerr'))
        if 'yerr' in kwds:
            kwds['yerr'] = np.array(kwds.get('yerr'))
        return ax.errorbar(x, y, **kwds)
    else:
        # prevent style kwarg from going to errorbar, where it is
        # unsupported
        if style is not None:
            args = (x, y, style)
        else:
            args = (x, y)
        return ax.plot(*args, **kwds)

def _compute_plot_data(self):
    data = self.data

    if isinstance(data, ABCSeries):
        label = self.label
        if label is None and data.name is None:
            label = 'None'
        data = data.to_frame(name=label)

    # GH16953, _convert is needed as fallback, for ``Series``
    # with ``dtype == object``
    from pint import PintType
    data = data._convert(datetime=True, timedelta=True)
    numeric_data = data.select_dtypes(include=[np.number,
                                               "datetime",
                                               "datetimetz",
                                               "timedelta", 
                                               pint.PintType])

    try:
        is_empty = numeric_data.empty
    except AttributeError:
        is_empty = not len(numeric_data)

    # no empty frames or series allowed
    if is_empty:
        raise TypeError('Empty {0!r}: no numeric data to '
                        'plot'.format(numeric_data.__class__.__name__))

    self.data = numeric_data

pd.plotting._core.MPLPlot._plot=_plot
pd.plotting._core.MPLPlot._compute_plot_data=_compute_plot_data

```
Thanks for your answer!

With the proposed code   
`df.length.plot()` yields:    
![image](https://user-images.githubusercontent.com/1677740/54348225-e1b78080-4648-11e9-910a-9266bba0d57e.png)

`df.plot('length')` yields:
![image](https://user-images.githubusercontent.com/1677740/54348336-1e837780-4649-11e9-85d7-28dfcac2d4f9.png)
(There is of course a difference, since here _length_ is used as x-axis values, whereas before _length_ were the y_axis values.) Note, that the x labels and x ticks are ajusted.

However, `plt.plot('length', data=df)` still gives the `IndexError: tuple index out of range` error.

Ah, we'd set up matplotlib on a different ureg to the one default ureg pintpandas uses.
```python3
ureg=pint.PintType.ureg
PA_=pint.PintArray
ureg.setup_matplotlib()
df = pd.DataFrame({
        "length" : pd.Series([1,2], dtype="pint[m]"),
        "width" : PA_([2,3], dtype="pint[mm]")
    })
```

That makes the df.plot work
Plotting works in pandas 1.2.0 following https://github.com/pandas-dev/pandas/pull/38246



```python3
import pint_pandas 
import matplotlib.pyplot as plt
import numpy as np
import pint
import pandas as pd

PA_= pint_pandas.PintArray
PT_ = pint_pandas.PintType
ureg=PT_.ureg
ureg.setup_matplotlib()
pint_pandas.show_versions()

>>> {'numpy': '1.18.5',
 'pandas': '1.3.0.dev0+160.g1bac7ac9c',
 'pint': '0.16.1',
 'pint_pandas': '0.1.dev66+gfe7dd55.d20201223'}

df = pd.DataFrame({
        "width" : PA_([2.5,3], dtype="pint[m]"),
        "distance" : PA_([2,3.5], dtype="in"),
        "height" : PA_([2,3], dtype=ureg.m),
        "depth" : PA_.from_1darray_quantity(ureg.Quantity([2,3],ureg.mm)),
    })
df.plot()
```


Fix patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 87c22cc..7471c7e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,14 +1,14 @@
 repos:
 -   repo: https://github.com/ambv/black
-    rev: 20.8b1
+    rev: 22.8.0
     hooks:
     - id: black
 -   repo: https://github.com/pre-commit/mirrors-isort
-    rev: 'v5.6.4'
+    rev: 'v5.10.1'
     hooks:
     -   id: isort
 -   repo: https://gitlab.com/pycqa/flake8
-    rev: 3.8.4
+    rev: 3.9.2
     hooks:
     - id: flake8
 
diff --git a/CHANGES b/CHANGES
index 6ca212e..2d729ed 100644
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,7 @@ pint-pandas Changelog
 - Quantity arrays may be used to initialise PintArrays without specifying the dtype. #104
 - Fixed a bug where `.astype("string[pyarrow]")` would not create pyarrow-backed arrays. #101
 - Fixed bug preventing adding to empty slices of PintArrays #69
+- Notebook updated to show plotting #116 #9 #43
 
 0.2 (2021-03-23)
 ----------------
diff --git a/notebooks/pint-pandas.ipynb b/notebooks/pint-pandas.ipynb
index 1f48575..230ce79 100644
--- a/notebooks/pint-pandas.ipynb
+++ b/notebooks/pint-pandas.ipynb
@@ -58,9 +58,9 @@
      "output_type": "stream",
      "text": [
       "{'numpy': '1.18.5',\n",
-      " 'pandas': '1.2.4',\n",
-      " 'pint': '0.17',\n",
-      " 'pint_pandas': '0.2.dev69+gc96dcd4.d20210323'}\n"
+      " 'pandas': '1.4.0',\n",
+      " 'pint': '0.18',\n",
+      " 'pint_pandas': '0.3.dev55+g2f530f4'}\n"
      ]
     }
    ],
@@ -1770,7 +1770,7 @@
     }
    ],
    "source": [
-    "pint_pandas.PintType.ureg.default_format = \"~P\"\n",
+    "pint_pandas.PintType.ureg.default_format = \"P~\"\n",
     "df_.pint.dequantify()"
    ]
   },
@@ -1992,19 +1992,16 @@
    "metadata": {},
    "outputs": [
     {
-     "ename": "TypeError",
-     "evalue": "no numeric data to plot",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-23-f0cc6ec599d4>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mpint_pandas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPintType\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mureg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msetup_matplotlib\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0max\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdf_\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'ShaftPower'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'FluidPower'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munstack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"pump\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32m~\\anaconda3\\envs\\pintpandastest_pd_1_2_np_1_18_5\\lib\\site-packages\\pandas\\plotting\\_core.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m    953\u001b[0m                     \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlabel_name\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    954\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 955\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mplot_backend\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    956\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    957\u001b[0m     \u001b[0m__call__\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m__doc__\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m~\\anaconda3\\envs\\pintpandastest_pd_1_2_np_1_18_5\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\__init__.py\u001b[0m in \u001b[0;36mplot\u001b[1;34m(data, kind, **kwargs)\u001b[0m\n\u001b[0;32m     59\u001b[0m             \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m\"ax\"\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"left_ax\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     60\u001b[0m     \u001b[0mplot_obj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPLOT_CLASSES\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mkind\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 61\u001b[1;33m     \u001b[0mplot_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     62\u001b[0m     \u001b[0mplot_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     63\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mplot_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m~\\anaconda3\\envs\\pintpandastest_pd_1_2_np_1_18_5\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py\u001b[0m in \u001b[0;36mgenerate\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    276\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mgenerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    277\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_args_adjust\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 278\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_compute_plot_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    279\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_setup_subplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    280\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_make_plot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32m~\\anaconda3\\envs\\pintpandastest_pd_1_2_np_1_18_5\\lib\\site-packages\\pandas\\plotting\\_matplotlib\\core.py\u001b[0m in \u001b[0;36m_compute_plot_data\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    439\u001b[0m         \u001b[1;31m# no non-numeric frames or series allowed\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    440\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mis_empty\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 441\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"no numeric data to plot\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    442\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    443\u001b[0m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnumeric_data\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_convert_to_ndarray\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mTypeError\u001b[0m: no numeric data to plot"
-     ]
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 432x288 with 1 Axes>"
+      ]
+     },
+     "metadata": {
+      "needs_background": "light"
+     },
+     "output_type": "display_data"
     }
    ],
    "source": [
@@ -2014,11 +2011,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 24,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "kilowatt"
+      ],
+      "text/latex": [
+       "$\\mathrm{kilowatt}$"
+      ],
+      "text/plain": [
+       "<Unit('kilowatt')>"
+      ]
+     },
+     "execution_count": 24,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
    "source": [
-    "# ax.yaxis.units"
+    "ax.yaxis.units"
    ]
   },
   {
@@ -2030,11 +2044,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 25,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "None\n"
+     ]
+    }
+   ],
    "source": [
-    "# print(ax.xaxis.units)"
+    "print(ax.xaxis.units)"
    ]
   },
   {
@@ -2049,7 +2071,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -2067,7 +2089,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 27,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -2083,7 +2105,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 28,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -2100,7 +2122,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 29,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -2118,9 +2140,80 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 30,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "c:\\users\\a\\repos\\pint-pandas\\pint_pandas\\pint_array.py:220: RuntimeWarning: pint-pandas does not support magnitudes of int32. Converting magnitudes to float.\n",
+      "  warnings.warn(\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>length</th>\n",
+       "      <th>width</th>\n",
+       "      <th>distance</th>\n",
+       "      <th>height</th>\n",
+       "      <th>depth</th>\n",
+       "      <th>displacement</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>2.0</td>\n",
+       "      <td>2.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2.0</td>\n",
+       "      <td>3.0</td>\n",
+       "      <td>3.0</td>\n",
+       "      <td>3.0</td>\n",
+       "      <td>3.0</td>\n",
+       "      <td>3.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  length width distance height depth displacement\n",
+       "0    1.0   2.0      2.0    2.0   2.0          2.0\n",
+       "1    2.0   3.0      3.0    3.0   3.0          3.0"
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
    "source": [
     "df = pd.DataFrame({\n",
     "        \"length\" : pd.Series([1.,2.], dtype=\"pint[m]\"),\n",
@@ -2128,26 +2221,37 @@
     "        \"distance\" : PA_([2.,3.], dtype=\"m\"),\n",
     "        \"height\" : PA_([2.,3.], dtype=ureg.m),\n",
     "        \"depth\" : PA_.from_1darray_quantity(Q_([2,3],ureg.m)),\n",
+    "        \"displacement\" : PA_(Q_([2,3],ureg.m)),\n",
     "    })\n",
     "df"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 31,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "meter"
+      ],
+      "text/latex": [
+       "$\\mathrm{meter}$"
+      ],
+      "text/plain": [
+       "<Unit('meter')>"
+      ]
+     },
+     "execution_count": 31,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
    "source": [
     "df.length.values.units"
    ]
   },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -2159,9 +2263,9 @@
  "metadata": {
   "anaconda-cloud": {},
   "kernelspec": {
-   "display_name": "Python [conda env:pintpandastest_pd_1_2_np_1_18_5]",
+   "display_name": "Python [conda env:pint-pandas-feb22]",
    "language": "python",
-   "name": "conda-env-pintpandastest_pd_1_2_np_1_18_5-py"
+   "name": "conda-env-pint-pandas-feb22-py"
   },
   "language_info": {
    "codemirror_mode": {
@@ -2173,7 +2277,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.5"
+   "version": "3.8.12"
   }
  },
  "nbformat": 4,
diff --git a/pint_pandas/pint_array.py b/pint_pandas/pint_array.py
index 0ea67c2..bf14a74 100644
--- a/pint_pandas/pint_array.py
+++ b/pint_pandas/pint_array.py
@@ -785,7 +785,7 @@ def _reduce(self, name, **kwds):
         if name in {"all", "any", "kurt", "skew"}:
             return result
         if name == "var":
-            return self._Q(result, self.units ** 2)
+            return self._Q(result, self.units**2)
         return self._Q(result, self.units)
 
 
@@ -816,16 +816,14 @@ def quantify(self, level=-1):
         return df_new
 
     def dequantify(self):
-        def formatter_func(units):
-            formatter = "{:" + units._REGISTRY.default_format + "}"
-            return formatter.format(units)
+        def formatter_func(dtype):
+            formatter = "{:" + dtype.ureg.default_format + "}"
+            return formatter.format(dtype.units)
 
         df = self._obj
 
         df_columns = df.columns.to_frame()
-        df_columns["units"] = [
-            formatter_func(df[col].values.units) for col in df.columns
-        ]
+        df_columns["units"] = [formatter_func(df[col].dtype) for col in df.columns]
         from collections import OrderedDict
 
         data_for_df = OrderedDict()


Test patch:
diff --git a/pint_pandas/testsuite/test_pandas_interface.py b/pint_pandas/testsuite/test_pandas_interface.py
index 6f71263..144f412 100644
--- a/pint_pandas/testsuite/test_pandas_interface.py
+++ b/pint_pandas/testsuite/test_pandas_interface.py
@@ -114,8 +114,8 @@ def data_for_grouping():
     # should probably get more sophisticated here and use units on all these
     # quantities
     a = 1.0
-    b = 2.0 ** 32 + 1
-    c = 2.0 ** 32 + 10
+    b = 2.0**32 + 1
+    c = 2.0**32 + 10
     return ppi.PintArray.from_1darray_quantity(
         [b, b, np.nan, np.nan, a, a, b, c] * ureg.m
     )
@@ -647,7 +647,7 @@ def check_reduce(self, s, op_name, skipna):
         if op_name in {"kurt", "skew"}:
             expected_u = None
         elif op_name in {"var"}:
-            expected_u = s.values.quantity.units ** 2
+            expected_u = s.values.quantity.units**2
         else:
             expected_u = s.values.quantity.units
         if expected_u is not None: