- (一) 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. 聚合
pandas.Series(data=None, index=None, dtype=None, name=None, ...)
主要参数:
- data:数据源, 可以是列表, 字典或者 numpy 的一维 ndarray 对象;
- index:设置索引名, 可以是以类似列表表示的索引名, 缺省值为索引号;
- dtype:可以是 numpy 的 dtype, 缺省状态为根据 data 的数据自动决定;
- name:给 Series 一个名字, 在后续最重要的 DataFrame 中可表现为一列的列名 (列索引名) 或一行的行名 (行索引名).
- values 属性:获取以 ndarray 的形式返回的所有元素值;
- index 属性 或 keys() 方法:获取所有的键 (索引名), 可迭代;
- items() 方法:所有键值对 (像字典一样,迭代时每个键值对以元组形式返回), 可迭代. 键值对是 (索引名,值).
pandas.date_range(start=None, end=None, periods=None, freq=None, ...)
主要参数:
- start:起始日期, 以字符串或时间日期数据提供;
- end:结束日期, 以字符串或时间日期数据提供;
- periods:生成数据的个数;
- freq:生成频率, 以字符串形式提供的时间单位, 比如 “H”、“D”、“W”、“M”.
访问 Series 对象内元素的格式类似访问 narray 数组。Series 对象后用一对中括号 [ ] ,指定访问的内容。中括号内可以放置如下内容:
- 索引号:按位置访问。
- 索引名:按设定的索引名访问。
- Serise 对象每个元素一一对应的逻辑值数据:过滤出对应逻辑值为 True 的元素,可使用条件表达式的计算结果产生逻辑值数据,可实现按条件访问。
添加元素:
方法一:
Series.append(to_append, ignore_index=False,……)
注: 该方法对象不支持直接添加对象元素(与 list 的 append 不同),可以通过该方法将 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 对象。
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 参数相似。通常需要指定,二维表格表头由此决定。
| 属性/方法 | 说明 |
|---|---|
| index 属性 | 行索引名 |
| columns 属性 | 列索引名 |
| values 属性 | 所有数据 (np数组) |
| keys() 方法 | 等同于 columns |
| shape 属性 | 数据形状 |
| size 属性 | 元素个数 |
| dtypes 属性 | 列数据类型 |
| describe() 方法 | 统计描述 |
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”,也可为 0 或 1,缺省为 “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 参数设定了列名,则使用之,代表文件中无表头,只有纯数据。如果 header 和 names 都有设定,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_buf 为 None,则将返回的 csv 格式作为字符串返回。否则返回 None。
常用参数:
- path_or_buf:文件名或文件句柄。
- sep:指定分隔符,默认为“,”
- columns:决定要输出的列。用序列方式给出需输出列的列名,缺省为输出所有的列。
- header:要输出的表头。缺省为所有列名,如果给出一个字符串列表,则以该列表中各字符串元素作为各列的列名(表头)。
- index:是否输出行名(行索引名)。缺省为 True。
- index_label:字符串或序列或 False, 缺省为 None。作为行索引名的列标签 (如果需要)。如果给定 None,并且 head 和 index 为 True,则使用整个行索引的 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:工作表名称。
- columns、header、index、index_label:同 to_csv 方法。
- engine:指定使用写 Excel 文件的专用模块名 "openpyxl" 或 "xlsxwriter"。
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。
(1) 直接的下标访问:
方法 1:
DataFrame [ ]
中括号内只能使用下述两种情况来访问多个整列以及多个整行:
- DataFrame [ 列索引名 或 列索引名列表 ]:访问单个列或者离散的多个列。
- DataFram [ start : end ]:切片访问连续的行, start 和 end 可以为整数的行索引号或其它数据类型的行索引名。
- 当 start、end 为行索引号时,表示的范围为 [start,end)(头闭尾开)
- 当 start、end 为行索引名时,表示的范围为 [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, ...)
可以合并 Series 和 DataFrame 类型
返回:合并后的新对象。不影响参加合并的各个原始对象
常用参数:
- objs:各个参与合并的对象所组成的列表。
- axis:合并方向,0 为合并行 (上下合并),1 为合并列 (左右合并)
- ignore_index:合并时忽略各数据对象的原始行索引名,重新设置新的行索引名为新的行索引号。
DataFrame.drop(labels=None, axis=0, index=None, columns=None, inplace=False, ...)
根据索引名删除 DataFrame 的行或列
返回:视 inplace 参数而定, DataFrame 或 None
常用参数:
- labels:索引名或多个索引名组成的列表。由 axis 决定是行索引名还是列索引名
- axis:删除方向,0 为删除行,1 为删除列。行索引名默认为 0
- index、columns:直接指定需删除的行索引名或列索引名。
- inplace:表示操作是否对原数据生效。
- True:作用于原 DataFrame 对象本身,返回 None。
- False:原 DataFrame 对象不变,返回新对象。
常用属性和方法如下
| 属性/方法 | 说明 | 属性/方法 | 说明 |
|---|---|---|---|
| year | 年 | week | 一年中的第几周 |
| month | 月 | quarter | 季节 |
| day | 日 | weekofyear | 一年中的第几周 |
| hour | 小时 | dayofyear | 一年中的第几天 |
| minute | 分钟 | dayofweek | 一周中的第几天 |
| second | 秒 | weekday() 方法 | 一周第几天 |
| date() 方法 | 日期 | day_name() 方法 | 星期名称 |
| time() 方法 | 时间 | is_leap_year | 是否闰年 |
Serise 对象和 DataFrame 对象的数据支持常见算术运算,如:+, -, * , /, ** 等;
Serise、DataFrame 对象继承了 numpy 的统计方法,可以对表格数据中的数值列进行统计分析
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False)
根据关键字,按指定轴向排序行或列,DataFrame 的排序与数组排序完全不同,当数组按 0 方向排序时,会破坏行的完整性,按 1 方向排序时,会破坏列的完整性;DataFrame 按 0 方向排序,即行与行之间的先后顺序发生了变化,但每一行的数据排序前和排序后是相同的。也可以按 1 方向排序,效果相似,但排的是列
最常用的排序方案:按 0 方向排,即表格数据有多个列,可以设置按某个关键字(列名)或多个关键字升序或降序排序
参数:
- by:将列名或列名组成的列表设为排序关键字,按指定的关键字排序。
- axis:排序的轴方向。0 决定行与行的上下顺序;1 决定列与列的左右顺序。
- ascending:True 升序、False 降序。
- inplace:表示操作是否对原数据生效。
- True:作用于原 DataFrame 对象本身,返回 None。
- False:原 DataFrame 对象不变,返回新对象。
- kind:排序算法 "quicksort", "mergesort", "heapsort"。
- na_position:缺失值参加排序时的固定位置 "first"(置顶)、"last"(沉底)。
- ignore_index:结果中去除原先行或列的索引名。
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。
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
返回:删除重复行后的 DataFrame 或 None。
参数:
- subset:列名或列名序列,指定需要判定是否有重复值的列,默认 None,判定所有的列。
- keep:'first','last',False。决定重复后保留的行。
- "first":删除重复的行,第一个重复的行保留(缺省)
- "last":删除重复的行,最后一个重复的保留。
- False:删除所有的重复行。
- inplace:表示操作是否对原数据生效。
- True:作用于原 DataFrame 对象本身,返回 None。
- False:原 DataFrame 对象不变,返回新对象。
- ignore_index:为 True 时,重设结果 DataFrame 的行索引名。
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
删除缺失数据所在的行或列
返回:视 inplace 参数而定, DataFrame 或 None
参数:
- axis:删除行或列。 0 删除行,1 删除列。
- how:
- "any":表示删除只要存在 NaN 的行或或列。此为默认值。
- "all":表示删除全部值都为 NaN 的行或列。
- thresh:至少留下有效数据大于或等于 thresh 值的行或列。
- subset:index 或 column 列表,按行列设置子集,在子集中查找缺失数据。
- inplace:表示操作是否对原数据生效。
- True:作用于原 DataFrame 对象本身,返回 None。
- False:原 DataFrame 对象不变,返回新对象。
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, ...)
用某些特定的值填充缺失数据所在的元素
返回:视 inplace 参数为而定
常用参数:
- value:填充值,可以是标量 (简单数据类型的数据)、dict、Series 或 DataFrame。
- method:填充的方法。
- "pad" 或 "ffill":使用同列 (行) 前一行 (列) 的值填充。
- "backfill" 或 "bfill":使用同列 (行) 后一行 (列) 的值填充。
- None:使用 value 参数的值。(缺省)
- axis:0 沿着列填充,1 沿着行填充。
- inplace:表示操作是否对原数据生效。
- True:作用于原 DataFrame 对象本身,返回 None。
- False:原 DataFrame 对象不变,返回新对象。
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 模块中的统计函数,甚至可以是自定义函数。各种提供形式如下:
- 统计函数名:相当于回调函数形式。比如 sum、mean
- 统计函数名的字符串表示:比如:"sum"、"mean"
- 上述两种类型的多个函数组成的列表:比如:[np.cumsum,'mean']
- 字典:以需统计列索引名为键,统计函数为值(可以是上述类型)的字典。
- 以元组形式自定义计算结果列名:
result=grpby[ ['速度','重量'] ].agg([('最小',min), ('平均',np.mean)]) - 以字典指定不同的列,不同的统计方法:
result=grpby.agg({'速度':[('最小',min),('平均',np.mean)],'重量':[('最大',max),('中位',np.median)]})



