3.Pandas基础知识


注:本教程使用 pandas 2.1.1版本作为示例,不同版本有一些方法可能存在不同,检查pandas版本

import pandas
print(pandas.__version__)

3.1 pandas 数据结构

  1. Series

    Series 是Pandas库中的一维数据结构,类似于Python中的列表和Numpy中的Ndarray对象。在具体实践中,我们往往视Series为一列数据。Series可以保存任何类型的数据,如整数、浮点数、字符串、Python对象等。如下图所示:

    • 左边红色框中是Series的索引(标签),称为index,可以理解为这个Series列数据中,某一行代表的意义;
    • 右边蓝色框是Series的值,可见里面的数据类型可以是各种。
      注意:索引只是起到定位,解释数据的作用,而Series的值才是真正存储的数据。如果没有索引,一般会默认从0开始生成整数索引。



      Series的索引可以通过 Series.index 属性获取,而Series对应的值可以通过 Series.loc[index名] 或者 Series.iloc[数字]方法获取。


  2. DataFrame

    DataFrame 是Pandas库中的 二维数据结构 ,类似于Excel表格,可以保存多种数据类型。如下图所示:

    DataFrame的索引包括:红框中所示行索引(index)绿框中所示列索引(columns),行索引和列索引都是标签。蓝色框中才是DataFrame的数据,可见里面的数据类型可以是各种类型。

    • DataFrame的行索引同样可以通过 DataFrame.index 属性获取,
      行数据通过 DataFrame.loc[行索引名] 和 DataFrame.iloc[行序号] 方法获取


    • DataFrame的列名可以通过 DataFrame.columns 属性获取,
      列数据可以通过 DataFrame[列名] 或者 DataFrame.列名
      或者 DataFrame.loc[: , 列名] 或者 DataFrame.iloc[: , 列序号] 方法获取

  3. Index

    Index 是 pandas 中的索引对象,上面在介绍 Series 和 DataFrame 时,已经多次提到了索引对象。

    它是一种特殊的序列,用于标记数据集中的行(index)和列(columns)。在没有特别指定的情况下,一般都是默认 从 0 开始取整数序号。

    常见的 Index 类型有如下几种,不用全部掌握,遇到不会的只需要去查官方文档即可

    • RangeIndex
      单调整数范围的索引
      官方文档:RangeIndex

      pd.RangeIndex(-10, 10, 2)

    • Int64Index
      整数索引
      注意,这个方法可能会在未来被舍弃,应尽量使用 pandas.Index 方法代替:

      pd.RangeIndex(-10, 10, 2)

      使用 pandas.Index 替代:

      pd.Index([-1, -2, 3, 4], dtype='int64')

    • UInt64Index
      非负数整数索引
      注意,这个方法可能会在未来被舍弃,应尽量使用 pandas.Index 方法代替:

      pd.UInt64Index([1,2,3,4])

      使用 pandas.Index 替代:

      pd.Index([1, 2, 3, 4], dtype='uint64')

    • Float64Index
      浮点数索引
      注意,这个方法可能会在未来被舍弃,应尽量使用 pandas.Index 方法代替:

      pd.Float64Index([1.0,2.0,3.0,4.0])

      使用 pandas.Index 替代:

      pd.Index([1.0, 2.0, 3.0, 4.0], dtype='float64')

    • MultiIndex
      多个层次且有归属关系的索引。
      官方文档:MultiIndex

      arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
      pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))

    • CategoricalIndex
      类别索引,可以理解为其他语言中的枚举类型。
      官方文档:CategoricalIndex

      pd.CategoricalIndex(["a", "b", "c", "a", "b", "c"])

    • IntervalIndex
      官方文档:IntervalIndex
      间隔索引,代表数值or时间的区间,一般应用于分箱(桶)数据。

      pd.IntervalIndex.from_arrays([1, 3, 5], [4, 6, 8])

    • DatetimeIndex
      时间索引,标注时序数据的时间,时序数据是算是一种较为特殊的数据吧,因为要求数据带有时间戳,比如股票的数据;所以这个时间索引基本上也就在处理这种数据的时候用到。
      官方文档:DatetimeIndex

      pd.DatetimeIndex(["1/1/2020 10:00:00+00:00", 
      "2/1/2020 11:00:00+00:00"])

    • TimedeltaIndex
      时间差索引,时间长度的数据。
      官方文档:TimedeltaIndex

      不太常用,可以自行参考官方文档。

    • PeriodIndex
      周期索引,表示一定周期的时间点。
      官方文档:PeriodIndex

      不太常用,可以自行参考官方文档。

3.2 pandas 数据类型

在Pandas中,存储的数据支持的数据类型主要有以下几种:

名称 释义 例子
浮点数(float) 用于存储浮点实数。 1.0、2.234、3.4E-6
整数(int) 用于存储整数。 1、2、3、4
布尔值(bool) 用于存储真假值。 True、False
时间和日期类型(timedelta[ns], datetime64[ns]) 用于存储时间间隔和日期时间。 2019-01-01 12:00:00
字符串(object) pandas用object存储字符串。 当一列中含多种类型的数据时,该列的数据类型通常为object。 ‘hello’、’world’
复合数据类型(object) pandas也用object存储复杂的数据结构,如(list, dict, tuple)。 [1, 2, 3]、{‘a’: 1, ‘b’: 2}、(1, 2, 3)

关于数据类型,大概知道以上表格内容基本就能应付大多数情况了,如果想要知道更多的细节内容,可以点此参考官方文档

假设有 DataFrame 对象 dft,可以通过 dft.dtypes 属性获取 df 中所有列的数据类型。如下所示:

延伸阅读: https://pbpython.com/pandas_dtypes.html