Python — Pandas 模块及常用函数

目录

    • (一) Series
      • 1. `Series` 对象的创建
      • 2. `Series` 的属性与方法
      • 3. 用日期函数生成日期的 `DatetimeIndex` 对象
      • 4. 访问 `Series` 对象
      • 5. `Series` 增减元素
      • 注: 关于 Unicode 中文输出对齐问题
    • (二) DataFrame
      • 1. `DataFrame` 对象的创建
      • 2. `DataFrame` 对象的常用属性和方法
      • 3. 修改 `DataFrame` 对象的索引名
      • 4. 读取或输出至 CSV 和 Excel
      • 注: 设定 `pandas` 的显示规则
      • 5. `DataFrame` 对象的访问
    • (三) DataFrame 操作
      • 1. 使用 `concat` 函数合并数据
      • 2. 使用 `drop` 方法删除行或列数据
      • 3. 转换与处理时间序列数据 (Timestamp (datetime.datetime) 对象)
    • (四) 基本运算与运算函数
      • 1. 基本运算
      • 2. `DataFrame` 数据的排序
    • (五) 数据清洗
      • 1. 转换数据类型
      • 2. 查找重复的数据行
      • 3. 删除重复的数据行
      • 4. 删除缺失数据
      • 5. 填充缺失数据
    • (六) 分组统计分析
      • 1. 分组
      • 2. `GroupBy` 对象、`DataFrame` 对象的常用统计方法
      • 3. 聚合

import pandas as pd

(一) Series

1. Series 对象的创建

pandas.Series(data=None, index=None, dtype=None, name=None, ...)

主要参数:

  • data:数据源, 可以是列表, 字典或者 numpy 的一维 ndarray 对象;
  • index:设置索引名, 可以是以类似列表表示的索引名, 缺省值为索引号;
  • dtype:可以是 numpydtype, 缺省状态为根据 data 的数据自动决定;
  • name:给 Series 一个名字, 在后续最重要的 DataFrame 中可表现为一列的列名 (列索引名) 或一行的行名 (行索引名).

2. Series 的属性与方法

  • values 属性:获取以 ndarray 的形式返回的所有元素值;
  • index 属性 或 keys() 方法:获取所有的键 (索引名), 可迭代;
  • items() 方法:所有键值对 (像字典一样,迭代时每个键值对以元组形式返回), 可迭代. 键值对是 (索引名,值).

3. 用日期函数生成日期的 DatetimeIndex 对象

pandas.date_range(start=None, end=None, periods=None, freq=None, ...)

主要参数:

  • start:起始日期, 以字符串或时间日期数据提供;
  • end:结束日期, 以字符串或时间日期数据提供;
  • periods:生成数据的个数;
  • freq:生成频率, 以字符串形式提供的时间单位, 比如 “H”、“D”、“W”、“M”.

4. 访问 Series 对象

访问 Series 对象内元素的格式类似访问 narray 数组。Series 对象后用一对中括号 [ ] ,指定访问的内容。中括号内可以放置如下内容:

  • 索引号:按位置访问。
  • 索引名:按设定的索引名访问。
  • Serise 对象每个元素一一对应的逻辑值数据:过滤出对应逻辑值为 True 的元素,可使用条件表达式的计算结果产生逻辑值数据,可实现按条件访问。

5. Series 增减元素

添加元素:

方法一:

Series.append(to_append, ignore_index=False,……)

注: 该方法对象不支持直接添加对象元素(与 listappend 不同),可以通过该方法将 to_append 对象添加到 Series 对象尾部,此方法返回一个新的、被添加过元素的 Series 对象,原 Series 对象内容不变。

常用参数:

  • to_append:单个的 Series 或者是 Series 组成的列表或元组。
  • ignore_index:忽略原有索引名
    • False:添加后,保持原有索引名,如果没有索引名的都会将索引号转成索引名后再添加 (缺省值)。
    • True:忽略所有已有的索引名,将结果中新的索引号转成索引名。

方法二: Series["新索引名"] = 表达式, 直接添加元素至 Series,对不存在的索引名指向的元素赋值,相当于在 Series 本身追加一个元素

删除元素:

Series.drop(labels=None, inplace=False ...)

可以删除一个或多个元素

常用参数:

  • labels:需删除元素的索引。单一的索引,或离散的放入列表的索引。
  • inplace
    • True:在 Series 内直接删除,原 Series 被改变。
    • False:不改变原对象的内容,返回一个新的被删除过元素的 Series 对象。

注: 关于 Unicode 中文输出对齐问题

pandas.set_option('display.unicode.east_asian_width', True)
# 启用后,可以检查每个字符的“东亚宽度”属性。通过将此选项设置为 True,可以正确对齐这些字符。但是,这将导致渲染时间比标准功能更长(2倍)

pandas.set_option('display.unicode.ambiguous_as_wide', False)
# 根据终端设置或编码,宽度为“歧义”的Unicode字符宽度可以为1或2个字符。该选项可用于处理歧义。display.unicode.ambiguous_as_wide 默认情况下,“歧义”字符的宽度(例如“¡”(反向感叹号))被视为1。对于中文,保持其缺省值 False 即可

(二) DataFrame

1. DataFrame 对象的创建

pandas.DataFrame(data=None, index=None, columns=None, ...)

返回:DataFrame 对象。

常用参数:

  • data:二维表格中的具体数据,通常由 ndarray 的二维数组、字典、列表等可迭代的数据、或者另外的 DataFrame 对象构成的数值。
  • index:指定行索引名,可以由 ndarray 的一维数组对象、列表等构成,其中每个元素可以是指定的字符串、整数等。缺省值为行索引号。通常不用指定。
  • columns:指定列索引名 (列名),其余和 index 参数相似。通常需要指定,二维表格表头由此决定。

2. DataFrame 对象的常用属性和方法

属性/方法 说明
index 属性 行索引名
columns 属性 列索引名
values 属性 所有数据 (np数组)
keys() 方法 等同于 columns
shape 属性 数据形状
size 属性 元素个数
dtypes 属性 列数据类型
describe() 方法 统计描述

3. 修改 DataFrame 对象的索引名

pandas.DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore')

返回:新 DataFrame 对象或 None

常用参数:

  • mapper:字典或函数,替换 axis 指定的行/列索引。
  • index:字典或函数,替换行索引名。
  • columns:字典或函数,替换列索引名。
    (字典形式:{已有索引名 : 新索引名,…})
  • axis:为 mapper 参数指定行或列,可以是 "index"或 “column”,也可为 01,缺省为 “index”。
  • inplace:表示操作是否对原数据生效。
    • True:作用于原 DataFrame 对象本身,返回 None
    • False:原 DataFrame 对象不变,返回新对象。

例如

df1=df.rename(columns={"A": "a", "B": "c"})
df1.rename(index={0: "x", 1: "y"},inplace=True)
df2=df.rename(lambda x:x+1,axis='index')

4. 读取或输出至 CSV 和 Excel

读取 CSV 文件的数据创建 DataFrame 对象:

pandas.read_csv(file, sep=',', header='infer', names=None, encoding=None, index_col=None, usecols=None, nrows=None ...)

返回:DataFrame

常用参数:

  • file:文件名或文件句柄,也可以是URL。
  • sep:指定分隔符,默认为 ','
  • header:指定表头列名所在的行。默认值为 'infer'推断列名:如果 names 参数未设定列名,则从文件的首行推断出列名;如果 names 参数设定了列名,则使用之,代表文件中无表头,只有纯数据。如果 headernames 都有设定,header 优先。
  • names:表头的列名,可以用类似列表来表示多个列名。
  • encoding:文件编码格式,默认为"utf-8”
  • index_col:数据读入后,指定将作为行索引名的列号或列名。用文件中某些列整列的内容当作 DataFrame 中的行索引名。缺省值为 None
  • usecols:读入指定的列。节约内存。缺省值 None,表示全部列
  • nrows:需读入的行数。节约内存。缺省值 None,表示全部行

读取 Excel 文件的数据创建 DataFrame 对象

pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, nrows=None, engine=None,……)

返回:如果读取单张工作表,返回 DataFrame,如果是多张,则返回一字典,键为工作表索引名,值为 DataFrame

常用参数 (其它常用参数功能与 read_csv 函数类似):

  • io:文件名、或文件句柄,也可以是URL。
  • sheet_name
    • 缺省值:为 0,获取首个工作表。
    • 单个或多个工作表:可以指定单个或以列表方式指定多个工作表的表索引号或表索引名。
    • None:代表所有工作表。
  • engine:选择读取 excel 文件的专用模块。"xlrd", "openpyxl""odf"

DataFrame 输出至 CSV 文件

DataFrame.to_csv(path_or_buf = None, sep = ',', columns = None, header = True, index = True, index_label = None, encoding = None, ...)

返回:如果 path_or_bufNone,则将返回的 csv 格式作为字符串返回。否则返回 None

常用参数:

  • path_or_buf:文件名或文件句柄。
  • sep:指定分隔符,默认为“,”
  • columns:决定要输出的列。用序列方式给出需输出列的列名,缺省为输出所有的列。
  • header:要输出的表头。缺省为所有列名,如果给出一个字符串列表,则以该列表中各字符串元素作为各列的列名(表头)。
  • index:是否输出行名(行索引名)。缺省为 True。
  • index_label:字符串或序列或 False, 缺省为 None。作为行索引名的列标签 (如果需要)。如果给定 None,并且 headindexTrue,则使用整个行索引的 name。如果对象使用 MultiIndex (复杂的行索引名),则应给出一个序列。如果为 False,则不输出整个行索引的 name
  • encoding:编码,缺省 "utf-8"

DataFrame 输出至 Excel 文件

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', columns=None, header=True, index=True, index_label=None, engine=None, ...)

常用参数 (其它常用参数功能与 to_csv 方法类似):

  • excel_writer:字符串代表的文件名或 ExcelWriter 对象 (输出多工作表时使用)。
  • sheet_name:工作表名称。
  • columnsheaderindexindex_label:同 to_csv 方法。
  • engine:指定使用写 Excel 文件的专用模块名 "openpyxl""xlsxwriter"

注: 设定 pandas 的显示规则

pandas.set_option(pat, value)

用于设置一些 pandas 的设置项。

参数:

  • pat:可用正则表达式表示的选项名称。
  • value:设定的值。None 表示没有限制。

常用设置项:

  • 'display.max_columns':最多显示列数。缺省值 20。
  • 'display.max_rows':最多显示行数。缺省值 60。
  • 'display.min_rows':最少显示行数。缺省值 10。
  • 'display.max_colwidth':单列的最大显示宽度。缺省值 50。

5. DataFrame 对象的访问

(1) 直接的下标访问:

方法 1:

DataFrame [ ]

中括号内只能使用下述两种情况来访问多个整列以及多个整行:

  • DataFrame [ 列索引名 或 列索引名列表 ]:访问单个列或者离散的多个列。
  • DataFram [ start : end ]:切片访问连续的行, startend 可以为整数的行索引号或其它数据类型的行索引名。
    • startend 为行索引号时,表示的范围为 [start,end)(头闭尾开)
    • startend 为行索引名时,表示的范围为 [start,end](头尾全闭)
    • 当行索引号与行索引名冲突时,行索引号优先。

方法 2:

DateFrame.列名

将列名当作属性名使用,以此访问单列。例如:w.日期

(2) 用 iloc 属性进行索引号 (位置) 访问

DataFrame.iloc [ 行索引号 , 列索引号 ]

行与列的索引号可以为: 单一索引号, 离散索引号列表(或类似列表), 切片索引号(头闭尾开)

(3) 用 loc 属性进行索引名访问:

DataFrame.loc [ 行索引名 , 列索引名 ]

行与列的索引名可以为:单一索引名, 离散索引名列表(或类似列表), 切片索引名(头尾全闭)

(4) 条件筛选访问
上述三种访问 DataFrame 的手法中,行和列的定义还可以分别接受逻辑值列表,达到筛选的效果,类似数组中的筛选方式。但与数组不同的是:行、列都可以有各自的逻辑值列表。

DataFrame [ 行逻辑值列表 ]
DataFrame.loc [ 行逻辑值列表 , 列逻辑值列表 ]
DataFrame.iloc [ 行逻辑值列表 , 列逻辑值列表 ]
  • 行逻辑值列表:元素个数等于行数的一维逻辑值列表或数组或 Series
  • 列逻辑值列表:元素个数等于列数的一维逻辑值列表或数组或 Series
  • 注意 iloc 中的逻辑列表不能是 Series !

(5) 通过方法访问
DataFrame.方法() 得到与方法对应的特殊区域,比如最前和最后的记录

print(w.head()) #前 5 行记录,缺省行数 5
print(w.tail(3)) #最后 3 行记录,指定行数 3

(三) DataFrame 操作

1. 使用 concat 函数合并数据

pandas.concat(objs, axis=0, ignore_index = False, ...)

可以合并 SeriesDataFrame 类型

返回:合并后的新对象。不影响参加合并的各个原始对象

常用参数:

  • objs:各个参与合并的对象所组成的列表。
  • axis:合并方向,0 为合并行 (上下合并),1 为合并列 (左右合并)
  • ignore_index:合并时忽略各数据对象的原始行索引名,重新设置新的行索引名为新的行索引号。

2. 使用 drop 方法删除行或列数据

DataFrame.drop(labels=None, axis=0, index=None,  columns=None, inplace=False, ...)

根据索引名删除 DataFrame 的行或列

返回:视 inplace 参数而定, DataFrameNone

常用参数:

  • labels:索引名或多个索引名组成的列表。由 axis 决定是行索引名还是列索引名
  • axis:删除方向,0 为删除行,1 为删除列。行索引名默认为 0
  • indexcolumns:直接指定需删除的行索引名或列索引名。
  • inplace:表示操作是否对原数据生效。
    • True:作用于原 DataFrame 对象本身,返回 None
    • False:原 DataFrame 对象不变,返回新对象。

3. 转换与处理时间序列数据 (Timestamp (datetime.datetime) 对象)

常用属性和方法如下

属性/方法 说明 属性/方法 说明
year week 一年中的第几周
month quarter 季节
day weekofyear 一年中的第几周
hour 小时 dayofyear 一年中的第几天
minute 分钟 dayofweek 一周中的第几天
second weekday() 方法 一周第几天
date() 方法 日期 day_name() 方法 星期名称
time() 方法 时间 is_leap_year 是否闰年

(四) 基本运算与运算函数

1. 基本运算

Serise 对象和 DataFrame 对象的数据支持常见算术运算,如:+, -, * , /, ** 等;
SeriseDataFrame 对象继承了 numpy 的统计方法,可以对表格数据中的数值列进行统计分析

2. DataFrame 数据的排序

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False)

根据关键字,按指定轴向排序行或列,DataFrame 的排序与数组排序完全不同,当数组按 0 方向排序时,会破坏行的完整性,按 1 方向排序时,会破坏列的完整性;DataFrame0 方向排序,即行与行之间的先后顺序发生了变化,但每一行的数据排序前和排序后是相同的。也可以按 1 方向排序,效果相似,但排的是列
最常用的排序方案:按 0 方向排,即表格数据有多个列,可以设置按某个关键字(列名)或多个关键字升序或降序排序

参数:

  • by:将列名或列名组成的列表设为排序关键字,按指定的关键字排序。
  • axis:排序的轴方向。0 决定行与行的上下顺序;1 决定列与列的左右顺序。
  • ascendingTrue 升序、False 降序。
  • inplace:表示操作是否对原数据生效。
    • True:作用于原 DataFrame 对象本身,返回 None
    • False:原 DataFrame 对象不变,返回新对象。
  • kind:排序算法 "quicksort", "mergesort", "heapsort"
  • na_position:缺失值参加排序时的固定位置 "first"(置顶)、"last"(沉底)。
  • ignore_index:结果中去除原先行或列的索引名。

(五) 数据清洗

1. 转换数据类型

print(w.最高气温.astype(np.unicode_ )) #转回 np的字符串
print(w.最高气温.astype('string')) #转回pd的字符串,首选
w.日期=pd.to_datetime(w.日期) #转成 np.datetime64[ns]类型

2. 查找重复的数据行

DataFrame.duplicated(subset = None, keep = 'first')

返回:逻辑值的 Series,在重复的行对应位置设置重复标记为 True

参数:

  • subset:列名或列名序列,指定需要判定是否有重复值的列,默认 None,判定所有的列。
  • keep'first''last'False。决定在返回的 Series 中打重复标记的方式,有重复时,哪一个不打重复标记。
    • "first":将重复的行标记置为 True,第一个重复的行不标记,保存原样(缺省)。
    • "last":将重复标的行记置为 True,最后一个重复的行不标记,保存原样。
    • False:所有的重复行都标记为 True

3. 删除重复的数据行

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

返回:删除重复行后的 DataFrameNone

参数:

  • subset:列名或列名序列,指定需要判定是否有重复值的列,默认 None,判定所有的列。
  • keep'first''last'False。决定重复后保留的行。
    • "first":删除重复的行,第一个重复的行保留(缺省)
    • "last":删除重复的行,最后一个重复的保留。
    • False:删除所有的重复行。
  • inplace:表示操作是否对原数据生效。
    • True:作用于原 DataFrame 对象本身,返回 None
    • False:原 DataFrame 对象不变,返回新对象。
  • ignore_index:为 True 时,重设结果 DataFrame 的行索引名。

4. 删除缺失数据

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

删除缺失数据所在的行或列

返回:视 inplace 参数而定, DataFrameNone

参数:

  • axis:删除行或列。 0 删除行,1 删除列。
  • how:
    • "any":表示删除只要存在 NaN 的行或或列。此为默认值。
    • "all":表示删除全部值都为 NaN 的行或列。
    • thresh:至少留下有效数据大于或等于 thresh 值的行或列。
  • subsetindexcolumn 列表,按行列设置子集,在子集中查找缺失数据。
  • inplace:表示操作是否对原数据生效。
    • True:作用于原 DataFrame 对象本身,返回 None
    • False:原 DataFrame 对象不变,返回新对象。

5. 填充缺失数据

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, ...)

用某些特定的值填充缺失数据所在的元素

返回:视 inplace 参数为而定

常用参数:

  • value:填充值,可以是标量 (简单数据类型的数据)、dictSeriesDataFrame
  • method:填充的方法。
    • "pad""ffill":使用同列 (行) 前一行 (列) 的值填充。
    • "backfill""bfill":使用同列 (行) 后一行 (列) 的值填充。
    • None:使用 value 参数的值。(缺省)
  • axis0 沿着列填充,1 沿着行填充。
  • inplace:表示操作是否对原数据生效。
    • True:作用于原 DataFrame 对象本身,返回 None
    • False:原 DataFrame 对象不变,返回新对象。

(六) 分组统计分析

1. 分组

DataFrame.groupby(by, axis=0, as_index= True, sort= True, ...)

DataFrame 对象分为若干组,并返回一个 DataFrameGroupBy 对象

常用参数:

  • by:分组依据 (key),通常为列索引列表,称为关键列。
  • axis:分组的轴方向。0 一个小组 n 行,1 一个小组 n 列。默认 0
  • as_index:表示聚合标签是否以索引形式输出,默认True。
  • sort:表示是否对分组后各小组间的顺序按 key 排序。默认 True

返回的 DataFrameGroupBy 对象,可以理解为整个 DataFrame (DF) 被分组后的多个小的 DF,它是可迭代的,可用迭代方式获取分组的“键”以及该键所属的小组 DF

2. GroupBy 对象、DataFrame 对象的常用统计方法

方法 说明 方法 说明
max 返回每组最大值 count 返回每组个数
min 返回每组最小值 cumcount 对每组中组员进行计数标记
mean 返回每组平均值 size 返回每组个数(DF的属性)
median 返回每组的中位数 head 返回每组的前n个值
sum 返回每组的和 std 返回每组标准差

求最值对应的索引名:

pandas.Series.idxmax() #返回Series中最大值的索引名
pandas.DataFrame.idxmax() #返回DataFrame中每一列最大值的索引名
pandas.Series.idxmin() #返回Series中最小值的索引名
pandas.DataFrame.idxmin() #返回DataFrame中每一列最小值的索引名

3. 聚合

GroupBy.agg(func, *args,**kwargs)

返回:根据提供的统计函数统计,并聚合,以 DataFrame 返回结果。

常用参数:

  • func:提供统计函数。既可以是 python 中的统计函数,也可以是 numpy 模块中的统计函数,甚至可以是自定义函数。各种提供形式如下:
    • 统计函数名:相当于回调函数形式。比如 summean
    • 统计函数名的字符串表示:比如:"sum""mean"
    • 上述两种类型的多个函数组成的列表:比如:[np.cumsum,'mean']
    • 字典:以需统计列索引名为键,统计函数为值(可以是上述类型)的字典。
    • 以元组形式自定义计算结果列名:
      result=grpby[ ['速度','重量'] ].agg([('最小',min), ('平均',np.mean)])
    • 以字典指定不同的列,不同的统计方法:
      result=grpby.agg({'速度':[('最小',min),('平均',np.mean)],'重量':[('最大',max),('中位',np.median)]})

你可能感兴趣的:(Python,python,pandas,数据分析)