使用十进制列将 pandas DataFrame 加载到 pyarrow table

Load pandas DataFrame to pyarrow table with decimal column

我正在尝试使用 float 列将 pandas DataFrame 加载到 pyarrow Table 并且在 pyarrow Table 构造期间遇到问题:ArrowTypeError: ('int or Decimal object expected, got float', 'Conversion failed for column float_column with type object')

重现代码:

import pandas as pd
import pyarrow as pa
from decimal import Decimal, Context

float_value = 1.2

print(type(float_value))

df = pd.DataFrame(data=[[float_value]], columns=["float_column"], dtype="object")

schema_dict = {"float_column":pa.decimal128(32, 6)}
schema = pa.schema(schema_dict)
table = pa.Table.from_pandas(df, schema)

DataFrame 本身来自 pandas.read_sql_query 方法,数据库中的基础类型是 decimal(32,6)。

问题是:如何在pandas DataFrame中指定SQL decimal(32,6)类型并将此类DataFrame转换为pyarrow Table?

总之,问题比我预想的要深。用于从 SQL db 读取的 pyodbc 正在返回正确的 Decimal 对象。 pandas,默认为 converting values of non-string, non-numeric objects to floating point

所以解决方案是在pandas.read_sql方法中使用coerce_float=False。