为什么 DataFrame 中的字符串存储为对象?
尽管将包含字符串的 DataFrame 列显式转换为字符串数据类型,Python 的 Pandas 库仍可能将它们报告为对象。这种差异是由于 NumPy 的底层数据结构造成的。
NumPy 使用 ndarray 来存储数据数组,ndarray 中的每个元素都有固定数量的字节。对于整数(int64)和浮点数(float64),每个元素占用8个字节。然而,字符串的长度是可变的,因此将它们直接存储在 ndarray 中是不切实际的。
为了适应这一点,Pandas 使用对象 ndarray 来存储指向对象的指针。这些对象包含实际的字符串值。因此,对象 ndarray 的大小不确定,并表示为“对象”数据类型。
示例:
考虑一个包含四个 64 位的 int64 数组整数和一个包含四个指向三个字符串对象的指针的对象数组:
int64 array: | 1 | 2 | 3 | 4 | object array: | pointer to "hello" | pointer to "world" | pointer to "!" | Visualization: --------- ----------- | int64 | object | |--------- -----------| | 1 | hello | | 2 | world | | 3 | ! | | 4 | null | --------- -----------
在此表示中,int64 数组占用固定的空间量,每个元素为 8 个字节。另一方面,对象数组存储指向不同大小的对象的指针,因此是“对象”数据类型。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3