【问题标题】:Load pandas DataFrame to pyarrow table with decimal column将 pandas DataFrame 加载到带有小数列的 pyarrow 表中
【发布时间】:2021-05-21 06:29:21
【问题描述】:

我正在尝试将 pandas DataFrame 加载到带有 float 列的 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 方法,数据库中的基础类型是十进制(32,6)。

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

【问题讨论】:

    标签: python pandas dataframe pyarrow


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2021-01-16
      • 2016-03-25
      • 1970-01-01
      • 2019-05-24
      • 2019-04-22
      • 2020-12-28
      相关资源
      最近更新 更多