Pandas加载JSON:将浮点数字段设为4位精度非科学计数法
解决Pandas加载JSON后浮点数显示为科学计数法的问题
嘿,这个问题我之前也踩过坑!先给你明确个关键点:你看到的科学计数法大多是Pandas的默认显示设置搞的鬼,数据本身的精度并没有丢。不过要实现和JSON源文件一致的4位精度常规显示,有两种实用方案:
方案一:先全局设置显示规则,再创建DataFrame
如果你希望所有浮点数列都用4位小数的常规格式显示,不想再看到科学计数法,可以在加载数据前先给Pandas设个全局规则,这样后续生成的所有DataFrame都会遵守这个格式:
import pandas as pd from pandas import json_normalize import json # 全局设置:浮点数显示为4位小数,禁用科学计数法 pd.set_option('display.float_format', lambda x: '%.4f' % x) with open('myjson.json') as f: loaded_file = json.load(f) df = json_normalize(loaded_file) print(df['action.time_sec']) print(df['action.diff'])
运行这段代码后,你打印出来的浮点数就会和JSON里的格式完全一致,比如14.7584、12345.3750这样的常规格式。
方案二:生成DataFrame后,针对特定列调整格式
如果你只想让个别列(比如action.time_sec和action.diff)按4位小数显示,不想影响其他列的默认设置,可以试试这两种方法:
方法A:用style.format做美观打印
适合需要输出整洁格式的场景,比如打印给别人看:
import pandas as pd from pandas import json_normalize import json with open('myjson.json') as f: loaded_file = json.load(f) df = json_normalize(loaded_file) # 给指定列设置显示格式 styled_df = df.style.format({ 'action.time_sec': '{:.4f}', 'action.diff': '{:.4f}' }) print(styled_df.to_string())
方法B:直接转成字符串列(如果不需要数值计算)
要是你之后不需要对这些浮点数做加减乘除之类的运算,可以在加载JSON后先把字段格式化成字符串,再转成DataFrame,这样完全和JSON里的格式一模一样:
import pandas as pd from pandas import json_normalize import json with open('myjson.json') as f: loaded_file = json.load(f) # 遍历数据,把指定浮点数转成4位小数的字符串 for item in loaded_file: item['action']['time_sec'] = '{:.4f}'.format(item['action']['time_sec']) item['action']['diff'] = '{:.4f}'.format(item['action']['diff']) df = json_normalize(loaded_file) print(df['action.time_sec']) print(df['action.diff'])
额外补充:要不要在创建时就修改存储精度?
你问到能不能在创建DataFrame时就把字段设置成4位精度的浮点数——这里要区分「显示精度」和「存储精度」:
- 要是只是想显示成4位小数,前面的方案足够了,数据本身还是保留原始精度的;
- 要是你确实需要存储时就只保留4位精度(比如节省空间或者业务要求),可以在创建后对列做四舍五入:
df = json_normalize(loaded_file) # 对指定列四舍五入到4位小数 df['action.time_sec'] = df['action.time_sec'].round(4) df['action.diff'] = df['action.diff'].round(4) # 再设置显示格式禁用科学计数法 pd.set_option('display.float_format', lambda x: '%.4f' % x) print(df)
不过一般不建议这么做,因为会丢失原始数据的精度,除非你确定不需要更高精度的数值。
内容的提问来源于stack exchange,提问作者user8870829
相关产品推荐
相关产品推荐

