Skip to content

Pandas

Numpy与Pandas

数组及其使用

由相同数据类型集成的聚合称为数组(Array),数组具有维度,规定在多维数组中,同一维度的元素必须长度相同,类似矩阵。

和列表不同,在Python中输出数组时,数组之间的元素使用空格进行分割。

创建数组

在创建数组前,需要先引入numpy模块。

创建数组使用numpy.array()方法,该方法返回一个数组,允许接收列表、元组等任意序列类型序列中嵌套了一个或多个序列的数据结构。

算术运算

1.数组和数计算:类似矩阵与常数的运算,该数会去和数组中的每一个元素进行相同的计算。

2.相同形状的数组的计算:两个数组会按照位置一一对应并计算。

序列及其使用

序列(Series)是由Pandas模块提供的一种数据类型,它是一种一维带索引的数组对象。也就是说,序列是在数组的基础上增加了索引,它拥有和数组类似的特性:单个序列中的值数据类型保持一致

另一方面,也可以认为序列是一种类似于字典的结构:它的每个元素都由索引(index)值(value)共同组成,但有别于字典的特征是,序列是一种有序的数据结构。 这意味着除了使用索引,我们也可以使用位置访问序列中的元素。 同时,当没有定义index时,位置(从0开始)就会自动成为索引。

创建序列

在创建数组前,需要先引入pandas模块。

创建数组使用pandas.Series()方法,该方法返回一个序列,通常需要接收至少一个参数values,或接收两个参数,另一个为index。 如果不传任何参数,将返回一个空的序列; 如果不传index,将默认从0开始生成索引。

indexvalues允许接收以下参数类型: 1.列表、数组等序列类型的数据结构。 2.若传入了index,则values可以接收一个常量,该常量会作为生成的序列的每一个元素的值。

访问序列

如上文所述,序列的访问方式有位置和索引两种。

1.位置访问:和列表相同,series[i]表示访问第$i+1$个元素。 2.索引访问:和字典相同,将index当作字典的keyvalue当作字典的value

算术运算

数据框及其使用

数据框(DataFrame)Pandas模块提供的一种数据结构类型。它是二维的矩阵数据表,也可以视为多个索引相同的序列的组合,即数据框的每一列都一个序列。

因此,数据框的同一列中值的数据类型相同,不同列的数据类型可以有所不同。

属性

  • dtypes :返回数据框的每一列的值的数据类型。
  • values:以数组的形式返回数据框对象的值。
  • index:以数组的形式返回数据框的行索引。

用来为超过一维的数组定义的属性,对于数据框而言:

  • axis=0:垂直方向进行操作
  • axis=1:水平方向进行操作

文件及其读取

读取csv文件

df=pandas.read_csv() #读取csv文件

该方法允许接收一个必选参数文件路径和其他可选参数:

  • encoding:指定文件编码,防止在读取中文时出现错误和异常,通常指定为utf-8
  • index_col:指定索引,接收一个列索引的名字,使用该列的值作为该数据框的行索引
  • usecols:读取指定列,接收一个列名的字符串列表
  • header:指定为None(非字符串)时,表明源数据不包含列索引(colums)。通常和names同时使用
  • names:指定列索引,接收一个列名的字符串列表

保存CSV文件

df.to_csv("/path") #保存该数据框为ncsv文件并输出到指定路径

Pandas模块中的数据框提供了成员方法to_csv()将数据框输出为csv文件。该方法接收一个必选参数输出路径(包括输出文件名和路径)和其它可选参数:

  • index:设置是否将索引写为第一列,接收一个布尔值,默认值为ture
  • encoding:设置编码,通常设置为utf-8-sig

按列索引访问列数据

df["columns"]  

通过列索引访问列的方法和列表一致,返回该列对应的Series

读取df的前五行数据

dataframeObj.head() #读取指定表格的前五行

head()方法允许接收一个整型,返回数据框的前$n$行数据。当参数为空时,默认读取前$5$行。

格式转换

时间类型

pandas.datetime(year,month,day) # 创建一个datetime对象

datetime方法接收至多六个参数,按顺序为年、月、日、时、分、秒,其中前三者是必须的。

访问DataframeSeries中的时间数据时,通常使用datetimeObj.dt.year,其中year也可以替换成其它字段。 对于单独的datetime对象或存储在其它数据容器中的datetime对象,不需要使用.dt

字符串转时间

pandas.to_datetime(Series) #将Series中的每个元素转换为datetime对象

to_datetime()方法允许接收一个元素类型为字符串的Series,返回一个元素类型为DatetimeSeries

在实际应用中,参数往往为df["colname"]

时间转字符串

dataframeObj["colname"].dt.strftime("%Y-%m")    #将指定列中的元素转换为年-月格式的字符串 

strftime()方法接收一个格式化字符串,返回一个转换后的字符串。常用的格式化符号如下:

image-20260105204151676

其它类型的格式转换

dataframeObj["colname"].astype()

astype()方法允许接收一个类型标识符,将原本的数据类型转换为指定的数据类型。允许接收的类型标识符如下:

  • float
  • str
  • int
  • bool

统计函数

以下函数均对单列生效,如果要对多列进行统计,则需要将多个列名以列表的形式传入,例如dataframeObj[["colname_1",""colname_2]]

求均值

dataframeObj["colname"].mean() #返回指定列的平均值

mean()方法不接收参数,返回单列的平均值。

取值

dataframeObj["colname"].round(2)  #四舍五入保留两位小数

round()方法接收一个整型,表示四舍五入后保留的小数位数。不传参数时,默认为0,即取整。

当参数为正整数时,表示保留到小数后;为负整数时保留到小数点前的十位数、百位数等。

最值

dataframeObj["colname"].max()
dataframeObj["colname"].min()

min()max()方法返回单列最值。

求和

dataframeObj["colname"].sum()

sum()方法返回单列所有元素的和。

元素统计

dataframeObj["colname"].count()

count()方法返回单列的元素数量。

中位数

dataframeObj["colname"].median()

median()方法返回单列元素的中位数。

结构重构

设置行索引

dataframeObj.set_index("colname") #设置数据框的索引为指定列

set_index()方法接收一个字符串,将指定列设为数据框的行索引,并返回修改后的数据框。

重置索引

dataframeObj.reset_index() #重置索引

reset_index()方法会重置索引为默认索引,并返回重置后的索引。

数据处理

字符串筛选

dataframeObj["colname"].str.contains("str") #从指定列中筛选出包含指定字符串的信息

.str.contains()方法允许接收一个字符串,在指定列中筛选包含该字符串的元素,并返回一个布尔值的Series

获取最大值的索引

dataframeObj["colname"].idxmax() #获取指定列中最大值所在列的索引

数据排序

dataframeObj.sort_value(by="str",ascending=False) #将指定列按升序排序 

sort_value()方法允许接收以下参数,并返回排序后的数据框:

  • by:字符串类型,为排序参照的列的列名。
  • ascending:布尔型,是否按升序排序。

数据清洗

需要进行清洗的脏数据按处理顺序分为数据缺失、数据异常和数据异常。

对于数据缺失,总体上有删除和填充两种思路。 对于异常值,通常使用修正或删除所在行两种思路。

统计信息

dataframeObj.info() #输出数据的统计信息

info()方法会输出数据框的各项信息,并自动打印,因此不需要手动打印。输出的信息包括以下内容:

  • 数据行数
  • 每列数据的列名、数据类型、非空行数
  • 占用存储空间大小

image-20260105213244401

空值判断

dataframeObj["colname"].isnull() 

isnull()方法用于判断是否为空值,返回一个布尔类型的Series,表示是否为空。

删除行

dataframeObj.drop(index=indexList)

drop()方法接收一个行索引列表,并返回删除指定行后的数据框。

填充缺失值

dataframeObj["colname"].fillna("str")  #将指定列中的空值填充为指定值

fillna()方法接收一个用于填充的值,并返回填充后的数据框。

判断重复值

dataframeObj["colname"].duplicated() #判断指定列中是否包含重复的值

duplicated()方法判断值和前面的是否有重复,并返回一个代表结果的布尔值Series

可视化