Numpy的字符串dtypes不是python字符串。
因此,
pandas故意使用本机python字符串,这需要对象dtype。
首先,让我演示一下numpy的字符串与众不同的含义:
In [1]: import numpy as npIn [2]: x = np.array(['Testing', 'a', 'string'], dtype='|S7')In [3]: y = np.array(['Testing', 'a', 'string'], dtype=object)
现在,“ x”是
numpy字符串dtype(固定宽度,类似c的字符串),并且
y是本机python字符串的数组。
如果我们尝试超过7个字符,我们会立即发现差异。字符串dtype版本将被截断:
In [4]: x[1] = 'a really really really long'In [5]: xOut[5]:array(['Testing', 'a reall', 'string'], dtype='|S7')
虽然对象dtype版本可以是任意长度:
In [6]: y[1] = 'a really really really long'In [7]: yOut[7]: array(['Testing', 'a really really really long', 'string'], dtype=object)
接下来,
|S尽管也有unipre定长字符串dtype,但dtype字符串无法正确保存unipre。现在,我将跳过一个示例。
最后,numpy的字符串实际上是可变的,而Python字符串则不是。例如:
In [8]: z = x.view(np.uint8)In [9]: z += 1In [10]: xOut[10]:array(['Uftujoh', 'b!sfbmm', 'tusjohx01'], dtype='|S7')
由于所有这些原因,
pandas选择不再允许类似C的固定长度字符串作为数据类型。如您所知,尝试将python字符串强制转换为numpy固定字符串将无法在中运行
pandas。相反,它始终使用本机python字符串,对于大多数用户而言,它们的行为更为直观。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)