StringDtype 对象与 Python Pandas 中的对象 dtype 有何不同?
Pandas不仅可以包含文本数据作为对象,还可以包含Pandas不理解的任何其他数据。这意味着,如果您说某列何时是Objectdtype,并不意味着该列中的所有值都是字符串或文本数据。事实上,它们可能是数字,也可能是字符串、整数和浮点数类型的混合。因此,由于这种不兼容,我们不能直接对该列进行任何字符串操作。
由于这个问题,pandas1.0版本引入了stringdtype,但是我们需要明确定义它。
查看一些示例以了解StringDtype和objectdtype的不同之处。
示例
list_ = ['python',90, 'string',2] #分配一个列表 ds = pd.Series(list_) #创建一个系列 print(ds) #印刷系列 print() print(type(ds[1])) # display type of 2nd element from dataSeries
解释
上面的代码创建了一个包含3个元素列表的Pandas系列,这些元素有字符串和整数。在最后一行,我们尝试获取第二个元素的数据类型。
输出结果
0 python 1 90 2 string 3 2 dtype: object <class 'int'>
我们可以清楚地看到dsSeries的dtype是一个对象,但是如果您尝试获取第二个元素的类型,它将以整数形式返回输出,而不是对象或字符串。因此得出结论,dtype对象不仅仅存储文本数据,它是所有数据的混合。
示例
这里显式定义到pandas系列方法的dtype参数。pd.StringDtype()
list_ = ['python',90, 'string'] ds = pd.Series(list_, dtype=pd.StringDtype()) print(ds) print() print(type(ds[1]))
解释
在此示例中,我们通过将dtype参数值分配为字符串来更改系列的默认dtype。我们再次尝试显示系列ds中的第二个元素的类型。
输出结果
0 python 1 90 2 string dtype: string <class 'str'>
系列ds的输出dtype是一个字符串,该ds的第二个元素的类型也是一个字符串。所以我们可以理解,dtypeStringDtype会改变所有数据的类型。
通过将StringDtype定义为文本数据,不会对执行字符串操作造成任何困难。这就是推荐使用StringDtype来存储所有文本数据的原因。