为什么 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 个字节。另一方面,对象数组存储指向不同大小的对象的指针,因此是“对象”数据类型。
以上是为什么 Pandas DataFrame 中的字符串在转换后仍显示为对象?的详细内容。更多信息请关注PHP中文网其他相关文章!