【问题标题】:Pandas to_sql: float binary issuePandas to_sql:浮点二进制问题
【发布时间】:2019-07-13 01:45:34
【问题描述】:

我有一个 Pandas DataFrame,我通过 to_sql 使用 sqlalchemy 发送到 MySQL。我在 SQL 中的浮点数有时会显示稍微偏离的小数位(与 df 相比)并导致错误:“警告:(1265,“第 1 行的“股息”列的数据被截断”)”。如何舍入浮点数以使其与 DataFrame 中的值匹配?

值从 CSV 中提取并从字符串转换为浮点数。写入 Excel 时看起来不错,但发送到 SQL 时,数字略有偏差。

我已经研究了浮点数在二进制方面的问题,但我不知道在从 DataFrame 到 SQL 的传输过程中如何覆盖它。

from sqlalchemy import create_engine
import pandas as pd

def str2float(val):
    return float(val)

data = pd.read_csv(
        filepath_or_buffer = filename,
        converters = {'col1':str2float}

db = create_engine('mysql://user:pass@host/database')
data.to_sql(con=db, name='tablename', if_exists='append', index=False)
db.dispose()

大多数浮点数类似于 0.0222000000,但每隔一段时间,它会显示为 0.0221999995。理想情况下,我希望它在末尾自动截断所有 0,但我会满足于第一个示例。但是我需要将其向上取整以匹配存储在 DataFrame 中的浮点数。

【问题讨论】:

    标签: python dataframe floating-point pandas-to-sql


    【解决方案1】:

    我遇到了类似的问题。我导入数据框中的数字有 3 个小数位。但是当插入到 SQL 表中时,它有 12 位数字。

    我刚刚使用了.round() 方法,它对我有用。

    df["colname"] = df["colname"].round(3)
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2010-11-03
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      相关资源
      最近更新 更多