pandas 读取JSON字符串解析长整形丢失数据精度,读取值与实际值不一致

news/2024/9/20 1:28:57/ 标签: pandas

目录

背景:

JSON字符串

解析代码

解决方案


背景:

在使用pandas read_json方法读取JSON存为Excel文件时,发现Excel中order_no的值与JSON字符串中的值不一致,开始怀疑是Excel保存精度问题,但是Excel输出实际为字符串格式应该不会存在精度问题,后面直接在输出Excel文件前打印pandas 对象该列值,发现在pandas中该值就已经不准了,所以初步判断是pandas的问题,因为之前也遇到过pandas自动把unix时间戳转换了,问题在于在读取 JSON 数据时,Pandas 可能会根据数据的值自动推断数据类型,导致长数字被解释为整数类型而不是字符串类型。

JSON字符串

order_list = [{"order_no": "240422237466696605",},{"order_no": "240423098951422944",},{"order_no": "240423138116796702",}]

  

使用pandas输出order_no发现输出的order_no与字符串中的值不一致。输出结果:

0    2404222374666966081    2404230989514229442    240423138116796704

解析代码

            order_json = json.dumps(order_list, indent=2)print(order_json)es_pd = pd.read_json(StringIO(order_json), convert_dates=False)# 240422237466696605等长数字pandas处理时会丢失精度,需要转换为字符串print('------------------------------')print(es_pd['order_no'])print('------------------------------')

由于在输出前并没有对order_no做任何计算,所以判断是pandas字段对数据进行了转换,查看read_json方法源码,发现可以指定列数据类型

dtype : bool or dict, default NoneIf True, infer dtypes; if a dict of column to dtype, then use those;if False, then don't infer dtypes at all, applies only to the data.For all ``orient`` values except ``'table'``, default is True.

解决方案

那我们指定order_no数据类型看看:

es_pd = pd.read_json(StringIO(order_json), convert_dates=False, dtype={'order_no': str})

重新运行代码查看输出:

0    2404222374666966051    2404230989514229442    240423138116796702Name: order_no, dtype: object

可以发现输出结果是正确的


http://www.ppmy.cn/news/1433543.html

相关文章

指针学习总结

当指针本身定义的类型不同十,指向的一次性取值长度也不同 数组元素的指针 数组存放字符串 数组存放字符串时存放在栈区,sizeof(str1) 128字节 字符指针指向字符串 str2此时存放的是h的地址,因此sizeof(str2) 4字节或者8字节 并且文字常量…

Nacos配置中心动态刷新原理

三种模式: ①:pull模式:主动拉去配置,通过固定的时间间隔。缺点:频繁请求,时效性不高,时间间隔不好设置。 ②:push模式:服务端检测到变化,主动将新配置推送给…

.gitignore修改后未生效处理

比如添加忽略 *.md后缀文件,如果之前提交过md文件,现在忽略就会无效,即使文件名称不同也不行。 这时需要进行一下三步。 删除本地缓存 git rm -rf --cached . 提交 git add . 更新 git commit -m update .gitignore

【前端】node.js常用命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、node是什么二、node.js常用命令三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人能够上手操作执行一些简单命令,…

Flink窗口机制

1.窗口的概念 窗口概念 时间是为窗口服务的。窗口是什么?为什么会有窗口呢? (1)Flink要处理的数据,一般是从Kafka过来的流式数据,如果只是单纯地统计流的数据量,是没办法统计的。 (…

Jenkins 哲学 - 插件初始化安装失败

到Jenkins官网查找最新的LST版本 最后的版本号一定要带,指定下载具体的版本号 docker pull jenkins/jenkins:2.426.1 自定义挂载目录,修改权限 mkdir /jenkins/jenkins_homechmod 777 /data/jenkins

Retelling|Gap Year

录音 Retelling|Gap Year gap year 转写 im a trainee from DJ teaching interpretation. And Im going to talk about taking a gap year. Its Most of our popular off for students are taken after college and before University, the UK taking a cut cups here and hav…

React-editor-js not showing up in a function component

React-editor-js not showing up in a function component react-editor-js 在react 函数组件中显示不出来 真的,我马上就想放弃它了。但是看它周下载量还挺多,我不信别人没遇到过。于是我继续在网络上挖呀挖。只是我一开始的方向错了。我一直以为我的写…

Qt外场软件崩溃问题解决记录

背景介绍 软件为基于Qt和C开发的桌面应用软件,主要功能为实现用户设备系统的监控功能和其他业务功能,特点是系统中的设备数量很多,且设备状态数据有两种不同协议的上报。 周末外场传来消息,软件一天内出现了四五次闪退。拿到外场…

河南灌溉排涝工程设计资质升级步骤与要点

河南灌溉排涝工程设计资质升级是一个系统性的过程,涉及多个关键步骤和要点。以下是对这一过程的详细梳理: 一、前期准备与自我评估 了解资质要求:首先,企业需要深入了解乙级灌溉排涝工程设计资质的具体要求和标准,对…

C语言——小知识和小细节16

一、左旋字符串 例如字符串 abcd &#xff0c;左旋一个就是 bcda &#xff0c;左旋两个就是 cdab 。 方法一&#xff1a;循环 #include <stdio.h> #include <string.h>void func(char* str, int n) {int i 0;int j 0;int len (int)strlen(str);n % len;//超出…

vue 的 diff 算法

vue的diff算法&#xff0c;是其虚拟DOM实现中的核心部分&#xff0c;用于高效地比较新旧虚拟节点&#xff0c;并据此更新实际的DOM&#xff0c; vue的diff算法&#xff0c;基于以下策略来优化性能&#xff1a; 1、同层比较&#xff1a; Vue 的 diff 不会跨层级比较节点&…

iOS ------代理 分类 拓展

代理协议 一&#xff0c;概念&#xff1a; 代理&#xff0c;又称委托代理&#xff08;delegate&#xff09;&#xff0c;是iOS中常用的一种设计模式。顾名思义&#xff0c;它是把某个对象要做的事委托给别的对象去做。那么别的对象就是这个对象的代理&#xff0c;代替它来打理…

javascript(第三篇)原型、原型链、继承问题,使用 es5、es6实现继承,一网打尽所有面试题

没错这是一道【去哪儿】的面试题目&#xff0c;手写一个 es5 的继承&#xff0c;我又没有回答上来&#xff0c;很惭愧&#xff0c;我就只知道 es5 中可以使用原型链实现继承&#xff0c;但是代码一行也写不出来。 关于 js 的继承&#xff0c;是在面试中除了【 this 指针、命名提…

无人机+光电吊舱:4K AI 180倍混合变焦吊舱技术详解

无人机搭载吊舱是一种常见的配置方式&#xff0c;吊舱可以装载不同的设备&#xff0c;以满足不同的任务需求。吊舱通常挂载在无人机的下方或侧面&#xff0c;可以根据需要进行调整。 随着无人机技术的飞速进步&#xff0c;4K AI 180倍混合变焦吊舱技术的出现&#xff0c;将无人…

C++进阶--异常

C语言传统的处理方式 终止程序&#xff1a;在发生错误时直接终止程序的运行&#xff0c;可以通过assert宏来进行实现。如assert(condition)&#xff0c;其中condition不满足要求时&#xff0c;将会使程序立刻停止执行&#xff0c;并输出相关错误信息。这种方式的确定是用户很难…

计算机网络4——网络层1

文章目录 一、网络层1、概念2、网络层的两个层面1&#xff09;介绍2&#xff09;问题3&#xff09;解决 二、网际协议IP1、介绍2、虚拟互联网络1&#xff09;介绍2&#xff09;案例 3、IP地址1&#xff09;IP 地址及其表示方法2&#xff09;分类的IP地址3&#xff09;无分类编址…

视频滚动字幕一键批量轻松添加,解锁高效字幕编辑,提升视频质量与观众体验

视频已成为我们获取信息、娱乐休闲的重要渠道。一部成功的视频作品&#xff0c;除了画面精美、音质清晰外&#xff0c;字幕的添加也是至关重要的一环。字幕不仅能增强视频的观感&#xff0c;还能提升信息的传达效率&#xff0c;让观众在享受视觉盛宴的同时&#xff0c;更加深入…

探究C++20协程(5)——基于挂起实现无阻塞的定时器

实现目标 当用传统的线程 sleep 函数来让程序等待时&#xff0c;实际上是在阻塞当前线程。阻塞意味着这个线程在指定的时间&#xff08;例如100毫秒&#xff09;内无法执行任何其他任务。这种方式虽然简单&#xff0c;但效率低下&#xff0c;因为它导致CPU资源在等待期间未被充…

使用uni-app开发app时遇到mqtt.js不可用的问题

使用uni-app开发app时遇到mqtt.js不可用的问题 1 问题背景 基于 Vue3 版本创建了 uni-app 项目用于开发微信小程序&#xff0c;项目中用到了 mqtt.js&#xff08;v4.1.0&#xff09;&#xff0c;编译为微信小程序能够正常运行&#xff0c;但是编译为 APP 后&#xff0c;控制台…