我有一个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中的浮点数。
答案 0 :(得分:0)
我有类似的问题。我导入到数据框中的数字有3个小数位。但是当插入到SQL表中时,它有12位数字。
我刚刚使用了.round()
方法,它对我有用。
df["colname"] = df["colname"].round(3)