You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas列中JSON内的大数转换为int64类型?

问题:读取BigQuery嵌套表时大数精度丢失的处理

我使用pd.read_gbq读取BigQuery嵌套表:

data = pd.read_gbq(sql, project_id=project)

返回的DataFrame中,events列的单元格为JSON数组格式,示例如下:

[{'key': 'firebase_screen_id', 'value': {'string_value': None, 'int_value': -2.047602554786245e+18, 'float_value': None, 'double_value': None}},
 {'key': 'ga_session_id', 'value': {'string_value': None, 'int_value': 1620765482.0, 'float_value': None, 'double_value': None}}]

其中int_value字段的-2.047602554786245e+18实际应为-2047602554786245165,但尝试以下方法均无法正确转换,单元格仍为包含精度丢失数值的对象数组:

data['events'].astype(str)
data.astype("Int64").astype(str)

请问如何获取完整整数并将该转换应用到整列?期望结果如下:

[{'key': 'firebase_screen_id', 'value': {'string_value': None, 'int_value': -2047602554786245165, 'float_value': None, 'double_value': None}},
 {'key': 'ga_session_id', 'value': {'string_value': None, 'int_value': 1620765482.0, 'float_value': None, 'double_value': None}}]
解决方案

问题根源是BigQuery返回的超大整数被Python解析为浮点数,导致精度丢失。需要遍历每个嵌套字典,手动修复int_value的精度:

  1. 定义处理单个事件数组的函数:
def fix_int_values(events_list):
    for event in events_list:
        value_dict = event.get('value', {})
        int_val = value_dict.get('int_value')
        if isinstance(int_val, float):
            # 用Decimal模块解析字符串,确保大数精度完全保留
            from decimal import Decimal
            value_dict['int_value'] = int(Decimal(str(int_val)))
    return events_list
  1. 将函数应用到events整列:
data['events'] = data['events'].apply(fix_int_values)

说明:直接将浮点数转int会丢失精度,通过Decimal解析字符串再转整数,可以完整保留原始大数的精确值。

内容的提问来源于stack exchange,提问作者mrDaft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:01:55