Чтобы записать столбец как десятичные значения в Parquet, они должны быть десятичными, чтобы начинаться с.
Значения в вашем фрейме данных (здесь для примера немного упрощено) являются числами с плавающей запятой, поэтому они записываются какfloats:
>>> df = pd.DataFrame({'value': [0.1, 0.0]})
>>> df
value
0 0.1
1 0.0
>>> df['value'].dtype
dtype('float64')
>>> df.to_parquet("test_data.parquet", index=False)
>>> pq.read_metadata("test_data.parquet").schema
<pyarrow._parquet.ParquetSchema object at 0x7f07248334a8>
value: DOUBLE
Но когда мы сначала конвертируем числа с плавающей запятой в Python, мы можем записать десятичные числа в Parquet:
>>> import decimal
>>> df['value_decimal'] = df['value'].astype(str).map(decimal.Decimal)
>>> df['value_decimal'].values
array([Decimal('0.1'), Decimal('0.0')], dtype=object)
>>> df.to_parquet("test_data.parquet", index=False)
>>> pq.read_metadata("test_data.parquet").schema
<pyarrow._parquet.ParquetSchema object at 0x7f073ae52898>
value: DOUBLE
value_decimal: FIXED_LEN_BYTE_ARRAY DECIMAL
Для преобразования в десятичные числа в Python: причиначто я сначала конвертирую в строки, потому что в противном случае десятичная дробь будет использовать полную точность с плавающей запятой (в результате более 10 десятичных дробей)