(一) Series
1.
Series
对象的创建
pandas.Series(data=None, index=None, dtype=None, name=None, ...)
主要参数:
-
data
:数据源, 可以是列表, 字典或者
numpy
的一维
ndarray
对象;
-
index
:设置索引名, 可以是以类似列表表示的索引名, 缺省值为索引号;
-
dtype
:可以是
numpy
的
dtype
, 缺省状态为根据
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,……)
注:
该方法对象不支持直接添加对象元素(与
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
对象。
注: 关于 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
”,也可为
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
的显示规则
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 ]
:切片访问连续的行,
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
:合并时忽略各数据对象的原始行索引名,重新设置新的行索引名为新的行索引号。
2. 使用
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
对象不变,返回新对象。
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
对象的数据支持常见算术运算,如:
+, -, * , /, **
等;
Serise
、
DataFrame
对象继承了
numpy
的统计方法
,可以对表格数据中的数值列进行统计分析
2.
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
:结果中去除原先行或列的索引名。
(五) 数据清洗
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)
返回:删除重复行后的
DataFrame
或
None
。
参数:
-
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
参数而定,
DataFrame
或
None
参数:
-
axis
:删除行或列。
0
删除行,
1
删除列。
-
how:
-
"any"
:表示删除只要存在
NaN
的行或或列。此为默认值。
-
"all"
:表示删除全部值都为
NaN
的行或列。
-
thresh
:至少留下有效数据大于或等于
thresh
值的行或列。
-
subset
:
index
或
column
列表,按行列设置子集,在子集中查找缺失数据。
-
inplace
:表示操作是否对原数据生效。
-
True
:作用于原
DataFrame
对象本身,返回
None
。
-
False
:原
DataFrame
对象不变,返回新对象。
5. 填充缺失数据
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
对象不变,返回新对象。
(六) 分组统计分析
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
模块中的统计函数,甚至可以是自定义函数。各种提供形式如下:
-
统计函数名:相当于回调函数形式。比如
sum
、
mean
-
统计函数名的字符串表示:比如:
"sum"
、
"mean"
-
上述两种类型的多个函数组成的列表:比如:
[np.cumsum,'mean']
-
字典:以需统计列索引名为键,统计函数为值(可以是上述类型)的字典。
-
以元组形式自定义计算结果列名:
result=grpby[ ['速度','重量'] ].agg([('最小',min), ('平均',np.mean)])
-
以字典指定不同的列,不同的统计方法:
result=grpby.agg({'速度':[('最小',min),('平均',np.mean)],'重量':[('最大',max),('中位',np.median)]})