【发布时间】:2018-10-03 05:13:34
【问题描述】:
我正在尝试使用 db2 读取数据表。然而,似乎小数被简单地忽略了,浮点数以某种方式乘以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 列是 DECIMAL 与 Size=9 和 Scale=2。当然,这个问题与此有关。我想我必须在pd.read_sql 中设置一个参数来解释该列。
我知道我可以简单地除以 100 来纠正这个问题。但我不想那样做。我想读正确的数字。
我也在使用 Windows。
【问题讨论】: