如何将整数导入为数值字符串并避免科学计数法(Pandas JSON问题)
解决JSON导入的两个问题:过滤指定字典+修复时间列类型与格式
步骤1:先过滤掉不需要的字典
在调用json_normalize之前,先对原始JSON列表做过滤,把你提到的"B"类字典排除。假设这类字典有明确标识(比如type字段值为"B"),处理代码如下:
import pandas as pd import json # 加载原始JSON数据 with open("your_data.json", "r") as f: data = json.load(f) # 过滤掉"B"类字典(可根据实际判断条件调整) filtered_data = [item for item in data if item.get("type") != "B"]
步骤2:修复endTime列的类型与科学计数法问题
因为缺失值NaN无法存储在普通整数列中,所以要用pandas的可空整数类型Int64(注意大写I),既能保留整数格式,又能兼容缺失值。同时通过数值转换修复科学计数法问题:
# 归一化过滤后的数据 df = pd.json_normalize(filtered_data) # 处理endTime列:先将字符串格式的数值转为数值类型,再转成可空整数 df["endTime"] = pd.to_numeric(df["endTime"], errors="coerce").astype("Int64") # 若需要将NaN替换为特定值(比如0),执行以下代码(替换后可转成普通int类型) # df["endTime"] = df["endTime"].fillna(0).astype(int)
补充说明
pd.to_numeric的errors="coerce"参数,会把无法转成数值的内容(比如空字符串)统一转为NaN,方便后续处理- 可空整数类型
Int64是pandas专门针对带缺失值的整数场景设计的,解决了普通int列无法存储NaN的问题 - 如果填充NaN后仍显示科学计数法,可通过
pd.set_option('display.float_format', '{:.0f}'.format)强制以整数格式显示
内容的提问来源于stack exchange,提问作者Kirk Fleming
相关产品推荐
相关产品推荐

