StringDtype 对象与 Python Pandas 中的 object dtype 有何不同?

pandasserver side programmingprogramming更新于 2025/4/5 12:52:17

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

由于这个问题,从 pandas 1.0 版本开始引入了字符串数据类型,但我们需要明确定义它。

查看一些示例以了解 StringDtype 和对象数据类型的区别。

示例

list_ = ['python',90, 'string',2] # 分配一个列表
ds = pd.Series(list_) # 创建一个 Series
print(ds) # 打印 series
print()
print(type(ds[1])) # 显示 dataSeries 中第 2 个元素的类型

解释

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

输出

0   python
1       90
2   string
3        2
dtype: object

<class 'int'>

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

示例

这里将 pd.StringDtype() 明确定义为 pandas series 方法的 dtype 参数。

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 的第二个元素的类型也是字符串。因此,我们可以理解 dtype StringDtype 将改变所有数据的类型。

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


相关文章