版本: 系统win 10 ,python 3.5, pandas:0.25.0

解决问题:

读取到的数据为 科学计数法,然后转换成整数影响精度.

pandas 使用 read_sql_query:

pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None)[source]

场景:

读取数据库数据:

比如:

`test01`

10

32861400000003365

None

读取上述的数据使用 read_sql_query:会自动转换为 float64, 并且读出来的数据是科学计数法,然后使用 astype("int64"),或者读取值进行(int)转换,值会变化(小1),如下模拟数据

int(float(32861400000003365))

Out[8]: 32861400000003364

所以目标是不能被强制转换成 float64,在这种场景下使用 coerce_float 不管是 设置True还是False, 都不起作用,

而 read_sql_query 也没有 dtype 强制设置类型的参数,

后来查源代码;查到转换类型的方法:

文件路径; Python35\Lib\site-packages\pandas\core\internals\construction.py 位置大概在 587行左右

def convert(arr):

if dtype != object and dtype != np.object:

arr = lib.maybe_convert_objects(arr, try_float=coerce_float)

arr = maybe_cast_to_datetime(arr, dtype)

return arr

改成:

def convert(arr):

if dtype != object and dtype != np.object:

if coerce_float:

arr = lib.maybe_convert_objects(arr, try_float=coerce_float)

arr = maybe_cast_to_datetime(arr, dtype)

return arr

之后使用 coerce_float 该参数就有效了.

注:

当处理数据的时候,

import pandas as pd

def test02():

df = pd.DataFrame({

"A":[32861400000003365,2,None,3],

"B": [1,2,3,4]

})

print(df["A"].dtype,df["B"].dtype)

print(df["A"][0])

test02()

output:

float64 int64

3.2861400000003364e+16

* 有None值,并且不指定类型.pd是会强制转换成float64类型

而指定类型后int64:

def test02():

df = pd.DataFrame({

"A":[32861400000003365,2,None,3],

"B": [1,2,3,4]

},dtype="int64")

print(df["A"].dtype,df["B"].dtype)

print(df["A"][0])

test02()

output:

object int64

32861400000003365

因为有None,存在所以会强制转换成字符型(str/object),所以 不指定类型时,

* 确保输入的数字没有None等空值

* 保证转换后的数据不是浮点型

这个时候不指定类型时,不会影响输出

确保输入的数据没有科学计数法,然后强制转成int64数据精度不会丢失,

总结:

当输入的数据有 有数字和None 时,使用read_sql_query 中的coerce_float (False) 控制,此时读取 数据是字符型

单输入数据有None 数字 字符,这个时候系统应该会强制转换成字符型的,也不会影响输出

在读取数据之前,把数据控制好,要么全是数字,要么有字符, 保证输入数据自动转换为int64 类型或者 字符型

输入整数控制长度,有None也不会影响结果

以上4种都不会 因为产生 float64 对长整形 的精度 影响

pythonpandas用sql查询数据表_python pandas read_sql_query使用记录相关推荐

  1. pythonpandas用sql查询数据表_pandas从数据库读取数据

    因为本周有一个是需要使用pandos做一个数据分析的需求,所以在这里做一下记录. Python中用Pandas进行数据分析,最常用的就是Dataframe数据结构, 这里我们主要介绍Pandas如何读 ...

  2. sql查询数据表某列的重复值并计数

     查询sql为: SELECTdevice_id,count( device_id ) AS number FROMcms_sticker_member GROUP BYdevice_id HAVIN ...

  3. SQL查询数据并插入新表

    SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename--如果导入数据并生成表 select * into 表 from ...

  4. SQL Server数据表中数据的增加(插入)、查询、修改、删除

    目录 零.码仙励志 一.数据表中数据的增加(插入) 二.数据表中数据的查询 三.数据表中数据的修改 四.数据表中数据的删除 零.码仙励志 伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都 ...

  5. SQL Server 查询数据表数据

    查询数据表数据 1.查询数据表所有字段的数据信息: 2.查询部分列的所有数据: 3.查询部分列的所有数据,过滤重复行信息:

  6. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  7. 数据库实验三 SQL查询数据

    实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...

  8. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用sel ...

  9. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

最新文章

  1. java data使用_@Data注解详解及使用方法-Fun言
  2. CIO能够对我们的社会起到什么作用?
  3. 子shell中使用相关的环境变量
  4. 一个方法搞定安卓路由跳转
  5. Linux 使用ps命令查看某个进程文件的启动位置
  6. swiper炫酷_swiper3d横向滚动多张炫酷切换banner
  7. PADS9.5详细安装步骤+安装包
  8. 协方差、相关系数---通俗解释
  9. Apache 服务器的配置
  10. 弱引用什么时候被回收_ThreadLocal的内存泄露?什么原因?如何避免?
  11. Kmplayer播放器 绿色免安装版 2016 中文版
  12. Docker原理之UnionFS
  13. Java ClassLoader findClass()方法与示例
  14. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
  15. linux 条码识别,PDF417二维条码识别技术的研究及其在Linux平台下的实现
  16. hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
  17. Window 10 单机配置MYSQL主从同步
  18. 勒索病毒运营团伙的运作流程
  19. 怎么解决ZBrush保存历史记录太多问题
  20. 玩转基因组浏览器之使用IGV查看基因结构信息

热门文章

  1. python计算特征的统计值并文本输出
  2. 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?
  3. Producing Simple Graphs with R
  4. linux关机 hibernate,Linux关机命令
  5. 大学计算机数学基础2,大学计算机基础(第2版)
  6. php 判断是不是前一天,PHP开发中,定时执行如何判断之前的脚本是否跑完?
  7. linux进程间通讯-信号
  8. CNN网络泛化能力--Why Deep Nets Generalize?
  9. 大角度人脸转正--Towards Large-Pose Face Frontalization in the Wild
  10. 【Harvest源码分析】GetFilteredSignal函数