正如 Josh Friedlander 的评论中所述,在 cuDF 中,对象数据类型明确用于字符串。在 pandas 中,这是字符串的数据类型,也是任意/混合数据类型(例如列表、字典、数组等)。这可以解释许多情况下的这种内存行为,但如果两列都是字符串,则无法解释它。
\n假设两列都是字符串,仍然可能存在差异。在 cuDF 中,字符串列表示为原始字符的单个内存分配、用于处理缺失值的关联空掩码分配以及用于处理行偏移的关联分配,与 Apache Arrow 内存规范一致。因此,这些列中表示的任何内容在 cuDF 中的数据结构中都可能比 Pandas 中的默认字符串数据结构更有效(这基本上一直都是如此)。
\n以下示例可能会有所帮助:
\nimport cudf\nimport pandas as pd\n\nXc = cudf.datasets.randomdata(nrows=1000, dtypes={"id": int, "x": int, "y": int})\nXp = Xc.to_pandas()\n\nprint(Xp.astype("object").memory_usage(deep=True), "\\n")\nprint(Xc.astype("object").memory_usage(deep=True), "\\n")\nprint(Xp.astype("string[pyarrow]").memory_usage(deep=True))\nIndex 128\nid 36000\nx 36000\ny 36000\ndtype: int64 \n\nid 7487\nx 7502\ny 7513\nIndex 0\ndtype: int64 \n\nIndex 128\nid 7483\nx 7498\ny 7509\ndtype: int64\n\nRun Code Online (Sandbox Code Playgroud)\n在 pandas 中使用 Arrow 规范字符串 dtype 可以节省大量内存,并且通常与 cuDF 匹配。
\n| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |