У меня проблема с тем, что pandas.round()
не работает должным образом после определения моих собственных типов данных. Я использую v. 0.24.2.
Скажите, что у меня есть данные как float64
, и я хочу, чтобы мои данные были float32
, чтобы сэкономить память, и я хочу сделать некоторое округление:
import pandas as pd
my_dtypes = {'val': 'float32'}
my_decimals = {'val': 4}
df = pd.DataFrame({'val': [0.14579999446868896]}) # <- this will be 'float64'
df_mydtypes = df.astype(my_dtypes)
df_rounded = df.round(my_decimals)
df_mydtypes_rounded = df_mydtypes.round(my_decimals)
Можно ожидать, что результат округляется до 0.1458
после округления до 4 знаков после запятой.
print(df_rounded['val'])
print(df_mydtypes_rounded['val'])
print(df_rounded['val'].item())
print(df_mydtypes_rounded['val'].item())
На поверхности это выглядит хорошо, но если мы посмотрим ближе (как это делал мой unittest ) значение другое:
0 0.1458
Name: val, dtype: float64
0 0.1458
Name: val, dtype: float32
0.1458
0.14579999446868896
Что здесь происходит?