Python — Pandas 模块及常用函数

(一) 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, in-dex_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) 对象)

常用属性和方法如下

属性/方法说明属性/方法说明
yearweek一年中的第几周
monthquarter季节
dayweekofyear一年中的第几周
hour小时dayofyear一年中的第几天
minute分钟dayofweek一周中的第几天
secondweekday() 方法一周第几天
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)]})

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年5月16日
下一篇 2022年5月16日

相关推荐