【发布时间】:2016-04-25 04:18:31
【问题描述】:
Numpy 似乎区分了 str 和 object 类型。例如我可以做::
>>> import pandas as pd
>>> import numpy as np
>>> np.dtype(str)
dtype('S')
>>> np.dtype(object)
dtype('O')
其中dtype('S')和dtype('O')分别对应str和object。
然而,熊猫似乎缺乏这种区别,并将str 强制转换为object。 ::
>>> df = pd.DataFrame({'a': np.arange(5)})
>>> df.a.dtype
dtype('int64')
>>> df.a.astype(str).dtype
dtype('O')
>>> df.a.astype(object).dtype
dtype('O')
强制类型为dtype('S') 也无济于事。 ::
>>> df.a.astype(np.dtype(str)).dtype
dtype('O')
>>> df.a.astype(np.dtype('S')).dtype
dtype('O')
对这种行为有什么解释吗?
【问题讨论】:
-
作为一个不是完整答案的非常简短的解释:如果您在
numpy中使用字符串 dtype,它基本上是一个固定宽度的 c 类字符串。在pandas中,它们是“普通”python 字符串,因此是对象类型。 -
这可能会解决您的问题 - stackoverflow.com/questions/21018654/… - 基本上它们存储对象 ndarray,而不是 ndarray 中的字符串。但是,我确实支持他们在区分类型时可以更清楚 - 例如能够区分“str”和“混合”列,这些列也报告为“O”。