pandas读取sql db2腐蚀decim

2024-04-25 10:35:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从使用db2的数据表中读取数据表。然而,似乎小数被简单地忽略了,而浮点数以某种方式乘以100。例如,100.50在读入pandas数据帧时变成{}。在

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

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

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

,它给出:

^{pr2}$

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

在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_AMOUNTDECIMAL,其中Size=9和{}。当然,这个问题与此有关。我想我必须在pd.read_sql中设置一个参数来解释该列。在

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

我也在用Windows。在


Tags: 数据nameidpandassqluidmypwd
3条回答

您可能会发现显式地将十进制分隔符设置为挪威使用的分隔符有帮助

pyodbc.setDecimalSeparator(',')

不确定是否尝试强制SQL输入:

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

请试试这个。它可能有用。在

import numpy as np
np.round(p_table, decimals=2)

相关问题 更多 >