为何Pandas Series输出显两列却非DataFrame?求二者核心差异
Pandas中Series与DataFrame的区分疑问
我刚开始学习Pandas,若问题表述不够清晰还请见谅。
代码示例
# 创建从'1/1/1'开始的小时级时间序列,共31个时间单位 longTimeRange = pd.date_range('1/1/1', periods=31, freq='H') # 为每个时间单位生成随机数,创建Series aTimeSeries = pd.Series(np.random.randn(len(longTimeRange)), index=longTimeRange) aTimeSeries.head()
输出结果
2001-01-01 00:00:00 -0.657026 2001-01-01 01:00:00 -1.244964 2001-01-01 02:00:00 -0.016981 2001-01-01 03:00:00 1.817097 2001-01-01 04:00:00 -0.419140 Freq: H, Length: 31, dtype: float64
疑问
该输出看似包含两列,为何仍被认定为Series而非DataFrame?若Series可呈现此类形式,如何与DataFrame区分?二者是否仅为数据访问方式不同的容器?
回答
首先要明确:Series是带索引的一维数组,你看到的输出左侧是它的index(索引),右侧才是实际存储的数据值——本质上它只有一组数据,只是显示时把索引列出来了,并非真正的两列数据。
而DataFrame是二维表格结构,它由多个Series组成,每个Series对应一列数据,每列可以有独立的列名,且通常共享同一行索引。
区分两者可以用这些简单方法:
- 直接查类型:执行
type(aTimeSeries)就能明确它是Series还是DataFrame - 看核心属性:Series只有
values(一维数组)和index;DataFrame额外有columns属性存储列名,values是二维数组 - 数据访问逻辑:Series可以直接通过位置
aTimeSeries[0]或索引标签aTimeSeries['2001-01-01 00:00:00']取值;DataFrame必须先指定列(比如df['列名']),再定位行,或者用df.loc[行标签, 列名]这种二维访问方式
二者的差异不止于访问方式,本质结构完全不同:Series适用于存储单一维度的序列数据(比如某一指标的时间序列);DataFrame则用于存储多列关联的表格型数据(比如包含姓名、年龄、成绩的学生表)。
内容的提问来源于stack exchange,提问作者Donna_Tartare
相关产品推荐
相关产品推荐

