libb.downcast

downcast(df, rtol=1e-05, atol=1e-08, numpy_dtypes_only=False)[source]

Downcast DataFrame to minimum viable type for each column.

Ensures resulting values are within tolerance of original values.

Parameters:
  • df (DataFrame) – DataFrame to downcast.

  • rtol (float) – Relative tolerance for numeric comparison.

  • atol (float) – Absolute tolerance for numeric comparison.

  • numpy_dtypes_only (bool) – Use only numpy dtypes.

Returns:

Downcasted DataFrame.

Return type:

DataFrame

Note

See numpy.allclose for tolerance parameters.

Example:

>>> from numpy import linspace, random
>>> from pandas import DataFrame
>>> data = {
... "integers": linspace(1, 100, 100),
... "floats": linspace(1, 1000, 100).round(2),
... "booleans": random.choice([1, 0], 100),
... "categories": random.choice(["foo", "bar", "baz"], 100)}
>>> df = DataFrame(data)
>>> downcast(df, rtol=1e-10, atol=1e-10).info()
<class 'pandas.core.frame.DataFrame'>
...
dtypes: bool(1), category(1), float64(1), uint8(1)
memory usage: 1.3 KB
>>> downcast(df, rtol=1e-05, atol=1e-08).info()
<class 'pandas.core.frame.DataFrame'>
...
dtypes: bool(1), category(1), float32(1), uint8(1)
memory usage: 964.0 bytes