pandas json_normalize解析时前导零被转数值 如何强制读为字符串
pandas json_normalize 强制全字段返回字符串的实现方法
pandas.json_normalize 本身没有提供类似pd.read_csv(..., dtype=str)的全局类型指定参数,要保留-03456这类带前导零的原始字符串内容,最可靠的方案是从JSON解析源头拦截自动类型转换,具体实现如下:
方案1:JSON加载阶段强制保留原始字符串(推荐,可完整保留前导零)
json_normalize出现前导零丢失的本质原因:上游JSON解析器默认把数字格式的内容自动转成了int/float类型,转换过程中前导零会被直接剥离。只要在加载JSON数据时,指定所有数值类内容不做类型转换、直接返回原始字符串,再传给json_normalize即可,完全不会出现原始内容丢失的问题。
示例代码:
import json import pandas as pd # 通用解析钩子:直接返回输入的原始字符串,不做任何数值类型转换 def _str_parser(input_str): return input_str # 加载JSON时替换默认的数值解析逻辑 with open("your_data.json", "r", encoding="utf-8") as f: raw_json = json.load( f, parse_int=_str_parser, parse_float=_str_parser, parse_constant=_str_parser ) # 执行扁平化处理,输出的所有字段均为原始字符串类型 df = pd.json_normalize(raw_json)
如果你的JSON数据来自接口响应,直接把json.load的第一个参数替换为接口返回的原始文本即可,其余逻辑不用调整。
方案2:解析后统一转字符串(仅适用于无原始内容还原需求的场景)
如果不需要找回已经被剥离的前导零,只是需要把所有字段统一为字符串类型,可以在json_normalize执行完成后全局转换类型:
df = pd.json_normalize(your_raw_data).astype(str)
注意:如果执行json_normalize时数字类内容已经被默认转成数值类型,带前导零的内容已经被截断,这个方法无法还原原始的前导零形态,优先选择第一种方案。
内容的提问来源于stack exchange,提问作者Isara De Silva
相关产品推荐
相关产品推荐

