在 Pandas 中存储 MongoDB 个 ObjectID
Storing MongoDB ObjectID's in Pandas
从 MongoDB 检索数据并加载到 Pandas 数据帧后,关于存储十六进制 ObjectID 的推荐做法是什么?
我认为,作为字符串存储,它们会占用大量内存,这在非常大的数据集中可能会受到限制。将它们转换为整数(从十六进制到十进制)是个好主意吗?这不会减少内存使用并加快处理速度(合并、查找...)吗?
顺便说一句,我是这样做的。这是最好的方法吗?不幸的是,它因 NaN 而失败。
tank_hist['id'] = pd.to_numeric(tank_hist['id'].apply(lambda x: int(str(x), base=16)))
首先,我认为它是 NaN,因为对象 ID 大于 64 位整数。 Python 可以处理,但基础 pandas/numpy 可能不会。
我认为您想使用地图来提取一些有用的字段,稍后您可以对其进行多级排序。不过,我不确定您是否会看到预期的性能提升。
我首先会在您的框架中创建一个新系列“oid_*”并检查您的结果
https://docs.mongodb.com/manual/reference/method/ObjectId/
将对象 ID 分解为组件:
- 时间戳(4 字节),
- 随机(5 个字节 - 曾经是主机标识符),并且
- 计数器(3 个字节)
这些整数大小适合 numpy 处理。
tank_hist['oid_timestamp'] = tank_hist['id'].map(lambda x: int(str(x)[:8], 16))
tank_hist['oid_random'] = tank_hist['id'].map(lambda x: int(str(x[:4])[8:18], 16))
tank_hist['oid_counter'] = tank_hist['id'].map(lambda x: int(str(x[:4])[18:], 16))
这将允许您对时间戳系列进行主要排序,对框架中的其他一些系列进行次要排序?然后在柜台上进行第三次排序。
地图是查找系列中每条记录的超级有用(虽然速度慢)的方法。请注意,如果您在此处添加计算时间以换取稍后节省此计算时间。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html
从 MongoDB 检索数据并加载到 Pandas 数据帧后,关于存储十六进制 ObjectID 的推荐做法是什么?
我认为,作为字符串存储,它们会占用大量内存,这在非常大的数据集中可能会受到限制。将它们转换为整数(从十六进制到十进制)是个好主意吗?这不会减少内存使用并加快处理速度(合并、查找...)吗?
顺便说一句,我是这样做的。这是最好的方法吗?不幸的是,它因 NaN 而失败。
tank_hist['id'] = pd.to_numeric(tank_hist['id'].apply(lambda x: int(str(x), base=16)))
首先,我认为它是 NaN,因为对象 ID 大于 64 位整数。 Python 可以处理,但基础 pandas/numpy 可能不会。
我认为您想使用地图来提取一些有用的字段,稍后您可以对其进行多级排序。不过,我不确定您是否会看到预期的性能提升。
我首先会在您的框架中创建一个新系列“oid_*”并检查您的结果
https://docs.mongodb.com/manual/reference/method/ObjectId/
将对象 ID 分解为组件:
- 时间戳(4 字节),
- 随机(5 个字节 - 曾经是主机标识符),并且
- 计数器(3 个字节)
这些整数大小适合 numpy 处理。
tank_hist['oid_timestamp'] = tank_hist['id'].map(lambda x: int(str(x)[:8], 16))
tank_hist['oid_random'] = tank_hist['id'].map(lambda x: int(str(x[:4])[8:18], 16))
tank_hist['oid_counter'] = tank_hist['id'].map(lambda x: int(str(x[:4])[18:], 16))
这将允许您对时间戳系列进行主要排序,对框架中的其他一些系列进行次要排序?然后在柜台上进行第三次排序。
地图是查找系列中每条记录的超级有用(虽然速度慢)的方法。请注意,如果您在此处添加计算时间以换取稍后节省此计算时间。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.map.html