第一章 数据结构和类型
00 min
2024-5-13
💡
在pandas模块教程讲解中,默认执行的代码: import pandas as pd import numpy as np import matplotlib.pyplot as plt

1. Series

pandas.Series对象用于保存带有索引的多种数据类型(str,int,float等)的一维数组,由index,values构成:
  • index可重复,可为数值或字符串
  • values :可以为多种数据类型,但是一个Series对象中类型必须统一
notion image

1.1 Series对象基本操作

1.1.1 Series初始化

  • pd.Series(data=None, index=None, dtype: 'Dtype | None' = None, name=None,) -> 'None’
    • data:可以是标量、列表、字典、NumPy数组等。
    • index:数据索引标签,如果不指定,默认从 0 开始(不具有唯一性,可重复)。
    • dtype:数据类型,默认会自己判断。
    • name:设置列名称(DataFrame中对应column参数)
    • 代码演示
      快速常见索引技巧:index = list(”abcdef”) 等价于index = [’a’,’b’,’c’,’d’,’e’,’f’]

1.1.2 索引操作

  • 标签索引:s.loc[] 包含终点
  • 位置索引:s.iloc[] 不包含终点
下面为通过索引操作访问数据:
代码案例:
 

2、查看特定量数据

  • Series.head([n]) 访问前n行数据,,缺省为5行
  • Series.tail([n]) 访问后n行数据,缺省为5行

1.1.4 Series对象运算

Series对象和Numpy数组一样,无须对每一个元素进行迭代处理,只需使用算数运算符即可自动实现对Series对象的各个元素进处理。

1.1.5 Series对象的增删改操作

注:
  • 给Series对象添加/删除元素时只能通过位置索引,不能用位置索引。故在上例中用s1[5] =6s1.iloc[5] =6 添加元素都是不允许的。
  • 拼接两Series对象时,存在两个相同标签并不会产生冲突。此时print(s3.loc[1])看看

1.1.6、获取非重复数据

series.drop_duplicates()方法获取非重复数据,对原series对象不做更改

1.1.7 对缺失数据处理

在pandas中,处理确实数据有两种方法:Series.isna()和Series.isnull(),且在使用上等同,同理notna()和notnull()也等同。
注:缺失值的表示方法:np.nan

1.1.8 常用属性

示例及返回所用数据:
名称
属性
示例
返回
axes
以列表的形式返回所有行索引标签。
s.axes
[Int64Index([1, 2, 3, 4, 5], dtype='int64')]
dtype
返回对象的数据类型。
s.dtype
object(另还有int64,float64,bool类型)
empty
返回True/False,判定是否为空对象
s.empty
False
is_unique
返回True/False,判定元素是否有重复
s.is_unique
True(如果s中有多个”a”返回False)
size
返回对象的长度。
s.size
5
values
返回 Series 对象对象的对应numpy.ndarray对象.
s.values
['a' 'b' 'c' 'd' 'e']
index
返回一个RangeIndex对象,用来描述索引的取值范围。
s.index
Int64Index([1, 2, 3, 4, 5], dtype='int64')
注意: 对于value参数, 大样多提一嘴. 在使用机器学习的框架建模时, 有时需要将pandas中Series对象的元素转换为Numpy数组处理.value属性是将Series对象作为NumPy数组进行返回的属性.但是, 如果Series对象中包含的数据类型是pandas中特有的category类型,是无法将其作为NumPy数组处理的.

1.2 DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

1.2.1 创建DataFrame长度

  • pd.DataFrame( data, index=None, columns=None, dtype=None)
    • 参数讲解
      • data:输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。
      • index:行标签,如果没有传递 index 值,则默认行标签是 np.arange(n),n 代表 data 的元素个数。
      • columns:列标签,如果没有传递 columns 值,则默认列标签是 np.arange(n)。
      • dtype:dtype默认为None,指明df对象中每一列的数据类型(参数值:str,”float64”,”int64”)。
注:index和columns里面标签值均不具有唯一性,可重复
notion image

1.2.2 访问DateFrame数据

对于FataFrame对象来说,行和列的位置索引和标签索引是其固有属性。位置索引固定为从0开始的连续整数。如果行标签索引和列标签索引未被给出,那么标签索引和位置索引相同,如果标签索引有被定义,则被重写。
下面讲解中用index_n和loc_n表示指定为字符串类型的标签索引,i_n和c_n表示系统默认的位置索引,int类型。
按行索引读取
  • df.loc[] 标签索引
    • df.loc[index_1] 访问单行
    • df.loc[index_1:index_2] 访问指定连续多行;包左包右
    • df.loc[[index_1, index_2, …, index_n]] 访问指定任意多行
  • df.iloc[] 位置索引
    • 略(和标签索引用法一致)
    • df.iloc[i_1:i_n:step],可以使用简写为df[i_1:i_n:step]形式
    • 但是df[i_1]的语法是错误的
按列索引读取
  • df.col_1 访问单列,需要指定字符串类型的列标签,且不能加引号
  • df[col_1] 访问单列, col_1如果是字符串必须加双引号, 返回的是Series对象
  • df[[col_1, col_2, …]] 访问多列,需要用中括号将多列标签索引包裹
    • df[[col_1]] 访问单列, 返回的是DataFrame对象
  • df[col_1:col_n:step] 用法给到df[i_1:i_n:step] 故,对列无效
读取行列
  • df.loc[index_1:index_2:step_i, col_1:col_2:step_c] 访问指定连续多行多列数据
  • df.iloc[i_1:i_n:step_i, c_1:c_n:step_c] 访问指定连续多行多列数据

1.2.3 对DataFrame增删改

1.2.4 常用方法和属性

名称
属性&方法描述
示例
返回
T(Transpose)
行和列转置。
df.T
1 2 3 4 one 1 2 3 4 two 1 2 3 4 three 1 2 3 4
axes
返回一个仅以行轴标签和列轴标签为成员的列表。
df.axes
[Int64Index([1, 2, 3, 4], dtype='int64'), Index(['one', 'two', 'three'], dtype='object')]
dtypes
返回每列数据的数据类型。
df.dtypes
one int64 two int64 three int64 dtype: object
empty
返回bool值,DataFrame中没有数据或者任意坐标轴的长度为0,返回True,否则返回False
df.empty
False
ndim
轴的数量,也指数组的维数。
df.ndim
2
shape
返回一个元组,表示了 DataFrame 维度。
df.shape
(4, 3)
size
返回元素数量,int型
df.size
12
values
返回numpy.ndarray数组对象,保存DataFrame 中的元素值。
df.values
array[[1 1 1] [2 2 2] [3 3 3] [4 4 4]]
head()
返回前 n 行数据。
tail()
返回后 n 行数据。
shift()
将行或列移动指定的步幅长度

数据类型

在大多数情况下,pandas使用NumPy的数组和dtypes作为序列和数据框中列的数据类型,NumPy支持的数据类型是float、int、bool、timedelta64[ns]。pandas扩展了NumPy的类型系统,用dtype属性来显示元素的数据类型,pandas主要有以下几种dtype:
Pandas dtype
Python type
NumPy type
Usage
object
str or mixed
string_, unicode_, mixed types
Text or mixed numeric and non-numeric values
int 64
int
int_,int8, int16, int32, int64, uint 8, uint 16,uint 32,uint 64
Integer numbers
float 64
float
float_,float16, float32, float64
Floating point numbers
bool
bool
bool_
True/False values
datetime64
NA
datetime 64[ns]
Date and time values
timedelta[ns]
NA
NA
Differences between two date times
category
NA
NA
Finite list of text values
 
 
 
 
 
  • Series:一维数组,与NumPy中的一维数组相似,和Python自身的list也相似。区别自语Series中的数据只能是一种数据,而list中的数据可以不一样
  • Time-Series:以时间为索引的Series
  • DataFrame:二维的表格型数据结构,经常用于处理Excel表格数据等。
  • Panel:三维数组(0.25版本后,统一使用xarray,不再支持Panel)