'how to check if value in a DataFrame is a type Decimal
I am writing a data test for some api calls that return a DataFrame with a date type and a type Decimal. I can't find a way to verify the Decimal
the DataFrame is returned as 2022-01-18 12:35:00 2856.8430
So I have
result = ds.DataService.get_recent(5, 24)
assert not result.empty
assert ptypes.is_datetime64_any_dtype(result['foo'])
but if I try
assert all(ptypes.is_float_dtype(result[col]) for col in result["foo1"])
raise KeyError(key) from err
KeyError: Decimal('2873.6408')
Solution 1:[1]
So given a series like result["foo1"]
, you can check that with
from decimal import Decimal
import pandas as pd
is_decimal: bool = pd.core.dtypes.common.is_dtype_equal(result["foo1"], Decimal)
Solution 2:[2]
Sadly the usage of is_dtype_equal
function as suggested yields True
if the Series is of another object
types. What worked for me was using isinstance(x, Decimal)
on of the the Series elements.
See example:
from decimal import Decimal
import pandas as pd
df = pd.DataFrame(
{
'a': ['A','B','C'] ,
'b': [11.1, 23.3,55.5],
'c': [Decimal(10.0), Decimal(11.1), Decimal(12.1)]
}
)
print("Using isinstance of")
print(isinstance(df['a'].values[0], Decimal))
print(isinstance(df['b'].values[0], Decimal))
print(isinstance(df['c'].values[0], Decimal))
print("Using is_dtype_equal")
print(pd.core.dtypes.common.is_dtype_equal(df['a'], Decimal))
print(pd.core.dtypes.common.is_dtype_equal(df['b'], Decimal))
print(pd.core.dtypes.common.is_dtype_equal(df['c'], Decimal))
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Henry Ecker |
Solution 2 | Adiel Loinger |