使用十进制列将 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。
我正在尝试使用 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。