pandas读取sql db2破坏小数

mor*_*rty 10 python sql pandas

我试图从使用db2读取数据表.但是,似乎只是忽略了小数,浮点数就会以某种方式乘以100.例如100.50成为10050.0在读入数据帧的大熊猫.

BTW我来自挪威,所以小数用a ,而不是a表示..我不知道这是否重要.

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

SELECT CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
FROM SAVINGS_TABLE
WHERE CUSTOMER_ID = 1
Run Code Online (Sandbox Code Playgroud)

, 这使:

CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
          1    ASSET_X       259131,72
          1    ASSET_Y       718533,33   
Run Code Online (Sandbox Code Playgroud)

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

在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
Run Code Online (Sandbox Code Playgroud)

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

柱子SAVINGS_AMOUNTDECIMALSize=9Scale=2.当然这个问题与此有关.我想我必须设置一个参数pd.read_sql来解释列.

我知道我可以简单地分开100来纠正这个问题.但我不想这样做.我想读正确的数字.

我也在使用Windows.

小智 3

您可能会发现将小数点分隔符显式设置为挪威使用的分隔符会有所帮助

pyodbc.setDecimalSeparator(',')
Run Code Online (Sandbox Code Playgroud)