如何用JSON将Pandas列中的值数据类型从big number转换为int64?

c3frrgcw  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(160)

我正在使用read_gbq阅读嵌套Bigquery表,并获取包含一些大数字的json列表

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

下面是一个单元格,其中的数组包含jsons

[{'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)

然后转换为int,再转换为string

data.astype("Int64").astype(str))

但它仍然是一个带有数组的对象,并修改了t中的big number
如何在这些单元格中得到完整整数,以及如何将其应用到列中?

[{'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}}]
pdkcd3nj

pdkcd3nj1#

通过进一步的调查,我发现这个值是浮点型的,并得出了这个函数,不是异常的最佳使用,但一次就好了

def values_to_int(json_data):
    result = {}
    for c in json_data:
        value = [e for c, e in c['value'].items() if e or e == 0]
        result[c["key"]] = value
        try:
            if type(result["firebase_screen_id"][0]) == float:
                result["firebase_screen_id"][0] = int(result["firebase_screen_id"][0])
        except Exception:
            continue
    return result

data[col] = data[col].apply(lambda x: values_to_int(x))

相关问题