Skip to content Skip to sidebar Skip to footer

How Can I Manage Units In Pandas Data?

I'm trying to figure out if there is a good way to manage units in my pandas data. For example, I have a DataFrame that looks like this: length (m) width (m) thickness (cm) 0

Solution 1:

There isn't any great way to do this right now, see github issue here for some discussion.

As a quick hack, could do something like this, maintaining a separate dict with the units.

In [3]: units = {}

In [5]: newcols = []
   ...: for col in df:
   ...:     name, unit = col.split(' ')
   ...:     units[name] = unit
   ...:     newcols.append(name)

In [6]: df.columns = newcols

In [7]: df
Out[7]:
   length  width  thickness
01.23.45.617.89.01.223.45.67.8

In [8]: units['length']
Out[8]: '(m)'

Solution 2:

As I was searching for this, too. Here is what pint and the (experimental) pint_pandas is capable of today:

import pandas as pd
import pint
import pint_pandas

ureg = pint.UnitRegistry()
ureg.Unit.default_format = "~P"
pint_pandas.PintType.ureg.default_format = "~P"

df = pd.DataFrame({
    "length": pd.Series([1.2, 7.8, 3.4], dtype="pint[m]"),
    "width": pd.Series([3.4, 9.0, 5.6], dtype="pint[m]"),
    "thickness": pd.Series([5.6, 1.2, 7.8], dtype="pint[cm]"),
})

print(df.pint.dequantify())
     length width thickness
unit      m     m        cm
01.23.45.617.89.01.223.45.67.8
df['width'] = df['width'].pint.to("inch")

print(df.pint.dequantify())
     length       width thickness
unit      m          in        cm
01.2133.8582685.617.8354.3307091.223.4220.4724417.8

Solution 3:

Offer you some methods:

  1. pands-units-extension: janpipek/pandas-units-extension: Units extension array for pandas based on astropy
  2. pint-pandas: hgrecco/pint-pandas: Pandas support for pint

you can also extend the pandas by yourself following this Extending pandas — pandas 1.3.0 documentation

Post a Comment for "How Can I Manage Units In Pandas Data?"