gpt4 book ai didi

python - pandas 读取 sql db2 损坏十进制

转载 作者:太空狗 更新时间:2023-10-29 20:15:02 25 4
gpt4 key购买 nike

我正在尝试使用 db2 读取数据表。然而,似乎小数被简单地忽略了, float 以某种方式乘以 100。例如,100.50 在读入 pandas 数据帧时变为 10050.0

顺便说一句,我来自挪威,所以小数由 , 而不是 . 表示。我不知道这是否重要。

我使用以下 SQL(在 WinSQL Lite 中):

SELECT CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
FROM SAVINGS_TABLE
WHERE CUSTOMER_ID = 1

,它给出:

CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
1 ASSET_X 259131,72
1 ASSET_Y 718533,33

我知道这是正确的,所以问题不在于数据。

在 Spyder 中,使用 Python,我有

import pandas as pd
import pyodbc as po

DSN = 'MY_DSN'
UID = 'MY_USER'
PWD = 'MY_PASSWORD'
CON = po.connect('DSN={0}; UID={1}; PWD={2}'.format(DSN, UID, PWD))

SQL = """SELECT CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
FROM SAVINGS_TABLE
WHERE CUSTOMER_ID = 1"""

df = pd.read_sql(SQL, CON)

df
Out[16]:
CUSTOMER_ID FUND_NAME SAVINGS_AMOUNT
0 1 ASSET_X 25913172.0
1 1 ASSET_Y 71853333.0

这里发生了什么,我该如何解决?

SAVINGS_AMOUNT 列是DECIMALSize=9Scale=2。这个问题肯定与此有关。我想我必须在 pd.read_sql 中设置一个参数来解释该列。

我知道我可以简单地除以 100 来纠正这个问题。但我不想那样做。我想读出正确的数字。

我也在使用 Windows。

最佳答案

不确定您是否尝试过强制执行 SQL 输入:

SQL = """SELECT CUSTOMER_ID, FUND_NAME, Cast(SAVINGS_AMOUNT AS Decimal(20,2))
FROM SAVINGS_TABLE
WHERE CUSTOMER_ID = 1"""

关于python - pandas 读取 sql db2 损坏十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49976315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com