2

我有一个 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 中的浮点数。

4

1 回答 1

0

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

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

df["colname"] = df["colname"].round(3)
于 2019-11-27T18:44:03.103 回答