pythonpandas用sql查询数据表_python pandas read_sql_query使用记录
版本: 系统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使用记录相关推荐
- pythonpandas用sql查询数据表_pandas从数据库读取数据
因为本周有一个是需要使用pandos做一个数据分析的需求,所以在这里做一下记录. Python中用Pandas进行数据分析,最常用的就是Dataframe数据结构, 这里我们主要介绍Pandas如何读 ...
- sql查询数据表某列的重复值并计数
查询sql为: SELECTdevice_id,count( device_id ) AS number FROMcms_sticker_member GROUP BYdevice_id HAVIN ...
- SQL查询数据并插入新表
SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename--如果导入数据并生成表 select * into 表 from ...
- SQL Server数据表中数据的增加(插入)、查询、修改、删除
目录 零.码仙励志 一.数据表中数据的增加(插入) 二.数据表中数据的查询 三.数据表中数据的修改 四.数据表中数据的删除 零.码仙励志 伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都 ...
- SQL Server 查询数据表数据
查询数据表数据 1.查询数据表所有字段的数据信息: 2.查询部分列的所有数据: 3.查询部分列的所有数据,过滤重复行信息:
- java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码
jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...
- 数据库实验三 SQL查询数据
实验三 SQL查询数据 实验目的 熟练掌握使用SQL查询语言.完成各类查询操作(单表查询,连接查询,嵌套查询,集合查询). 实验内容 现有一个单位内部的小型图书借阅系统,假设每本图书的数量无限制,并且 ...
- mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用sel ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
最新文章
- java data使用_@Data注解详解及使用方法-Fun言
- CIO能够对我们的社会起到什么作用?
- 子shell中使用相关的环境变量
- 一个方法搞定安卓路由跳转
- Linux 使用ps命令查看某个进程文件的启动位置
- swiper炫酷_swiper3d横向滚动多张炫酷切换banner
- PADS9.5详细安装步骤+安装包
- 协方差、相关系数---通俗解释
- Apache 服务器的配置
- 弱引用什么时候被回收_ThreadLocal的内存泄露?什么原因?如何避免?
- Kmplayer播放器 绿色免安装版 2016 中文版
- Docker原理之UnionFS
- Java ClassLoader findClass()方法与示例
- WPF入门教程系列(二) 深入剖析WPF Binding的使用方法
- linux 条码识别,PDF417二维条码识别技术的研究及其在Linux平台下的实现
- hive 修改分桶数 分桶表_疯狂Hive之DDL操作二(三)
- Window 10 单机配置MYSQL主从同步
- 勒索病毒运营团伙的运作流程
- 怎么解决ZBrush保存历史记录太多问题
- 玩转基因组浏览器之使用IGV查看基因结构信息
热门文章
- python计算特征的统计值并文本输出
- 什么是维度诅咒?如何评估降维算法在当前任务数据集上的效果?
- Producing Simple Graphs with R
- linux关机 hibernate,Linux关机命令
- 大学计算机数学基础2,大学计算机基础(第2版)
- php 判断是不是前一天,PHP开发中,定时执行如何判断之前的脚本是否跑完?
- linux进程间通讯-信号
- CNN网络泛化能力--Why Deep Nets Generalize?
- 大角度人脸转正--Towards Large-Pose Face Frontalization in the Wild
- 【Harvest源码分析】GetFilteredSignal函数