[英]Storing MongoDB ObjectID's in Pandas
從 MongoDB 檢索數據並加載到 Pandas dataframe 后,關於存儲十六進制 ObjectID 的推薦做法是什么?
我認為,存儲為字符串時,它們占用了大量的 memory,這在非常大的數據集中可能會受到限制。 將它們轉換為整數(從十六進制到十進制)是個好主意嗎? 這不會減少 memory 的使用並加快處理速度(合並、查找...)嗎?
順便說一句,這就是我的做法。 這是最好的方法嗎? 不幸的是,NaN 失敗了。
tank_hist['id'] = pd.to_numeric(tank_hist['id'].apply(lambda x: int(str(x), base=16)))
首先,我認為它是 NaN,因為 object ID 大於 64 位 integer。 Python 可以處理,但底層的 pandas/numpy 可能不能。
我認為您想使用 map 來提取一些有用的字段,以后可以對其進行多級排序。 不過,我不確定您是否會看到預期的性能改進。
我將首先在您的框架中創建一個新系列“oid_*”並檢查您的結果
https://docs.mongodb.com/manual/reference/method/ObjectId/
將 object id 分解為以下組件:
這些 integer 尺寸很好,適合 numpy 處理的 integer 尺寸。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.