Python Pandas 中的 StringDtype 对象与 object 数据类型有何区别?


Pandas 不仅可以将文本数据作为对象包含在内,还可以包含 Pandas 不理解的任何其他数据。这意味着,如果您说当某一列为 Object 数据类型时,并不意味着该列中的所有值都将是字符串或文本数据。实际上,它们可能是数字,或者字符串、整数和浮点数数据类型的混合。因此,由于这种不兼容性,我们无法直接对该列执行任何字符串操作。

由于此问题,从 Pandas 1.0 版本开始引入了字符串数据类型,但我们需要显式定义它。

请查看一些示例,以了解 StringDtype 和 object 数据类型有何区别。

示例

list_ = ['python',90, 'string',2] # assign a list ds = pd.Series(list_) # create a Series print(ds) # print series print() print(type(ds[1])) # display type of 2nd element from dataSeries

解释

以上代码创建了一个包含 3 个元素的 Pandas Series,这些元素包含字符串和整数。在最后一行,我们尝试获取第二个元素的数据类型。

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

输出

0   python
1       90
2   string
3        2
dtype: object

<class 'int'>

我们可以清楚地看到 ds Series 的数据类型是 object,但是如果您尝试获取第二个元素的类型,它会将输出返回为整数,而不是 object 或字符串。因此,可以得出结论,object 数据类型不仅存储文本数据,而且是所有数据的混合。

示例

这里将 pd.StringDtype() 显式定义为 Pandas series 方法的 dtype 参数。

list_ = ['python',90, 'string'] ds = pd.Series(list_, dtype=pd.StringDtype()) print(ds) print() print(type(ds[1]))

解释

在此示例中,我们通过将 dtype 参数值分配为字符串来更改 series 的默认数据类型。然后我们再次尝试显示 series ds 中第二个元素的类型。

输出

0   python
1       90
2   string
dtype: string

<class 'str'>

series ds 的输出数据类型是字符串,并且 ds 的第二个元素的类型也是字符串。因此,我们可以理解,StringDtype 数据类型将更改所有数据类型。

通过将 StringDtype 定义为文本数据,这不会给执行字符串操作带来任何困难。这就是建议使用 StringDtype 存储所有文本数据的原因。

更新于: 2021年11月18日

608 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告