熊猫to_sql:浮点二进制问题

时间:2019-07-13 01:45:34

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

我有一个Pandas DataFrame,我正在使用sqlalchemy通过to_sql发送到MySQL。我在SQL中的浮点数有时显示的小数位数略有偏移(与df相比),并导致错误:“警告:(1265,“第1行的列'Dividend'的数据被截断”))。如何舍入浮点数以使其与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中的浮点数。

1 个答案:

答案 0 :(得分:0)

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

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

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