import pandas as pd
Series
对象的创建pandas.Series(data=None, index=None, dtype=None, name=None, ...)
主要参数:
data
:数据源, 可以是列表, 字典或者 numpy
的一维 ndarray
对象;index
:设置索引名, 可以是以类似列表表示的索引名, 缺省值为索引号;dtype
:可以是 numpy
的 dtype
, 缺省状态为根据 data
的数据自动决定;name
:给 Series
一个名字, 在后续最重要的 DataFrame 中可表现为一列的列名 (列索引名) 或一行的行名 (行索引名).Series
的属性与方法values
属性:获取以 ndarray
的形式返回的所有元素值;index
属性 或 keys()
方法:获取所有的键 (索引名), 可迭代;items()
方法:所有键值对 (像字典一样,迭代时每个键值对以元组形式返回), 可迭代. 键值对是 (索引名,值)
.DatetimeIndex
对象pandas.date_range(start=None, end=None, periods=None, freq=None, ...)
主要参数:
start
:起始日期, 以字符串或时间日期数据提供;end
:结束日期, 以字符串或时间日期数据提供;periods
:生成数据的个数;freq
:生成频率, 以字符串形式提供的时间单位, 比如 “H”、“D”、“W”、“M”.Series
对象访问 Series
对象内元素的格式类似访问 narray
数组。Series
对象后用一对中括号 [ ]
,指定访问的内容。中括号内可以放置如下内容:
Serise
对象每个元素一一对应的逻辑值数据:过滤出对应逻辑值为 True
的元素,可使用条件表达式的计算结果产生逻辑值数据,可实现按条件访问。Series
增减元素添加元素:
方法一:
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
对象的创建pandas.DataFrame(data=None, index=None, columns=None, ...)
返回:DataFrame
对象。
常用参数:
data
:二维表格中的具体数据,通常由 ndarray
的二维数组、字典、列表等可迭代的数据、或者另外的 DataFrame
对象构成的数值。index
:指定行索引名,可以由 ndarray
的一维数组对象、列表等构成,其中每个元素可以是指定的字符串、整数等。缺省值为行索引号。通常不用指定。columns
:指定列索引名 (列名),其余和 index
参数相似。通常需要指定,二维表格表头由此决定。DataFrame
对象的常用属性和方法属性/方法 | 说明 |
---|---|
index 属性 |
行索引名 |
columns 属性 |
列索引名 |
values 属性 |
所有数据 (np 数组) |
keys() 方法 |
等同于 columns |
shape 属性 |
数据形状 |
size 属性 |
元素个数 |
dtypes 属性 |
列数据类型 |
describe() 方法 |
统计描述 |
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
”,也可为 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')
读取 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
:
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, index_label=None, engine=None, ...)
常用参数 (其它常用参数功能与 to_csv
方法类似):
excel_writer
:字符串代表的文件名或 ExcelWriter
对象 (输出多工作表时使用)。sheet_name
:工作表名称。columns
、header
、index
、index_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。DataFrame
对象的访问(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
concat
函数合并数据pandas.concat(objs, axis=0, ignore_index = False, ...)
可以合并 Series
和 DataFrame
类型
返回:合并后的新对象。不影响参加合并的各个原始对象
常用参数:
objs
:各个参与合并的对象所组成的列表。axis
:合并方向,0
为合并行 (上下合并),1
为合并列 (左右合并)ignore_index
:合并时忽略各数据对象的原始行索引名,重新设置新的行索引名为新的行索引号。drop
方法删除行或列数据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
数据的排序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]类型
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
删除列。"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
。
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中每一列最小值的索引名
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)]})