pandas 中的序列数据结构

数据挖掘 熊猫
2022-02-26 19:10:09

pandas文档的概述页面中,Series 数据结构被描述为“同质类型”。

Data Structures
Dimensions  Name    Description
1   Series  1D labeled homogeneously-typed array
2   DataFrame   General 2D labeled, size-mutable tabular structure with potentially heterogeneously-typed column

但是,可以创建具有多种数据类型的 Series 对象。

pd.Series(data=[1,2,3,4,5,'x'], index=['a','b','c','d','e','f'])
#=>a    1
#  b    2
#  c    3
#  d    4
#  e    5
#  f    x
#  dtype: object

那么homogeneously-typed熊猫文档中提到的含义是什么?

2个回答

您的系列确实是同质类型的,您可以检查它的类型:

s = pd.Series(data=[1,2,3,4,5,'x'], index=['a','b','c','d','e','f'])
s.dtype
> dtype('O')

其中“O”代表“对象”。但是,如果您检查系列中各个元素的类型,它们会有所不同:

type(s['a'])
> int
type(s['f'])
> str

我认为要记住的关键是,如果您的 Series 或 DataFrame Column 不是同质类型的(尽管技术上是“对象”类型的同质类型),那么某些 pandas 函数将不起作用。

这是 pandas 文档的Essential Basic Functionality中更好的解释:

如果 DataFrame 或 Panel 包含同质类型的数据,则实际上可以就地修改 ndarray,并且更改将反映在数据结构中。对于异构数据(例如,DataFrame 的某些列并非都是相同的 dtype),情况并非如此。与轴标签不同,values 属性本身不能被分配。

注意:处理异构数据时,将选择生成的 ndarray 的 dtype 以容纳所有涉及的数据。例如,如果涉及字符串,则结果将是 object dtype。如果只有浮点数和整数,则结果数组将是 float dtype。

如果您在一个系列中有多种不同的类型,比如说intand string,所有数据都将被向上转换为相同的 dtype=object(从您的示例中可以看到)。