常用的数据结构
Series 带标签的一维数组
DatetimeIndex 时间序列
DataFrame 带标签且大小可变的二维表格结构
Panel 带标签且大小可变的三维数组
Series 是 pandas 提供的一维数组,由索引和值两部分组成,是一个类似于字典的结构
# 1. 通过 range 对象或列表创建,使用默认索引
s1 = pandas.Series(range(1, 20, 5))
# 2. 通过字典创建,使用键作为索引
s2 = pandas.Series({
'语文':90, '数学':93, 'Python':92, '物理':91})
s1[3] = -17
s2['语文'] = 94
abs(s1)
s1 + 5
# 0 -> 20
# 1 -> 21
# 2 -> 22
# . . .
# . . .
# . . .
s1.add_prefix(2)
# 语文 -> 语文_张三
# 数学 -> 数学_张三
# Python -> Python_张三
# 物理 -> 物理_张三
s1.add_suffix('_张三')
s2.hist()
matplotlab.show()
s2.argmax()
# 返回一个元素为 boolean 类型的 Series
s2.between(90, 94, inclusive=True)
s2[s2>90]
s2.median()
s2[s2>s2.median()]
# 先对数组中所有数据开平方,然后扩大 10 倍,对结果四舍五入后保留一位小数
round((s2**0.5)*10, 1)
s2.nsmallest(2)
只有两个等长的 Series 对象之间可以进行四则运算和幂运算,并且只对两个 Series 对象中都有的索引对应的值进行运算,非共同索引对应的值为控制 NaN
s2.pipe(lambda x:x+3).pipe(lambda x:x*3)
s2.apply(lambda x:x+3)
s2.std()
s2.var()
s2.sem()
存在
等价于 True 的值any(s2)
所有值
都等价于 Trueall(s2)
date_range(start=None, end=None, periods=None, freq=‘D’)
常用参数
start=None 指定起始日期
end=None 指定结束日期
periods=None 指定产生的数据数量
freq='D' 指定间隔,D(天), W(周), H(小时), M(月末最后一天), MS(月初第一天), T(分钟), A(年末最后一天), AS(年初第一天)
pandas.Series(index, data)
常用参数
index 用于指定索引
data 用于指定数据
import pandas as pd
data = pd.Series(index=pd.date_range(start='20190701', periods=24, freq='H'), data=range(24))
data[:5]
data.resample('3H').mean()
data.resample('3H').sum()
# OHLC 表示 OPEN(第一个数)、HIGH(最大的数)、LOW(最小的数)、CLOSE(最后的数)
data.resample('3H').ohlc()
# 索引中的所有日期加一天
data.index = data.index + pd.Timedelta('1D')
day = pd.Timestamp('20190323')
day.weekday_name
pd.Timestamp('201903230800').is_leap_year
day.quarter, day.month
day.to_pydatetime()
pd.DataFrame(np.random.randint(1, 20, (5, 3)),
index=range(5),
columns=['A', 'B', 'C'])
pd.DataFrame(np.random.randint(5, 15, (13, 3)),
index=pd.date_range(start='201907150900',
end='201907152100',
freq='H'),
columns=['熟食', '化妆品', '日用品'])
# 字典的键会作为列名
pd.DataFrame({
'语文':[22,23,56,78],
'数学':[45,13,76,78],
'英语':[23,28,24,96]},
index=['张三', '李四', '王五', '赵六']
# 未指定 index,使用默认索引,键作为 columns,第一列有 5 个值,第二列只有 1 个值,自动对 B 列进行扩充,使其与 A 列数据一样多
pd.DataFrame({
'A':range(5), 'B':3})
read_excel(io, sheetname=0, header=0, skiprows=None, index_col=None, names=None, thousands=None, usecols, na_values=None)
常用参数
io : 指定要读取的文件,可以是字符串形式的文件路径、url 或文件对象
sheetname :指定读取的 worksheet,可以是表示 worksheet 序号的整数或表示 worksheet 名字的字符串;如果要同时读取多个 worksheet 可以使用形如 [0, 1, 'sheet3'] 的列表;如果指定为 None 则表示读取所有 worksheet 并返回包含多个 DataFrame 结构的字典,默认读取第一个 worksheet 中的数据
header : 指定 worksheet 列名,默认使用第 0 行;如果指定为 None 则使用数字作为表头
skiprows : 指定要跳过的行的索引组成的列表
index_col : 指定作为行索引的列下标,可以是包含若干下列表的列表
names : 指定列名
thousands : 指定文本转换为数字时的千分符;如果 Excel 中有以文本形式存储的数字,可以使用该参数
usecols : 指定要读取的列的索引或名字,多个列用列表
na_values : 指定哪些值被解释为缺失值
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
注:切片操作左闭右开
注:先取列,后取行
注:先取行,后取列
loc 可以用来索引多行或多列数据
at 不能用来索引多行或多列数据
根据行索引或列名排序
sort_index(axis=0, ascending=True, inplace=False)
常用参数
axis : 0 表示按照行索引排序,1 表示按照列名排序
ascending : True 表示升序排序,False 表示降序排序
inplace : True 表示原地排序,False 表示返回一个新的 DataFrame
扩展:汉字的 Unicode 编码通过内置函数 ord() 查看
根据值排序
sort_values(by, ascending=True, na_position='last')
常用参数
by : 指定排序依据的一个列或多个列(多个列以列表形式给出)
ascending : True 表示升序排序,False 表示降序排序;可以通过传入 bool 列表(长度与 by 指定的列表长度相等)为不同的列指定不同的顺序
na_position : last 表示把缺失值放在最后面,first 表示把缺失值放在最前面
聚合:对分组后的每一组数据再次调用聚合函数,包括求和、求均值、求中值等
groupby(by=None, axis=0, as_index=True, squeeze=False)
常用参数
by : 指定作为分组依据的列名(一个或多个)或行索引(函数、字典、Series 对象)
axis : 0 表示按照行索引分组,1 表示按照列名分组
as_index : True 表示用来分组的列中的数据作为结果 DataFrame 的行索引,False 表示用来分组的列中的数据不作为结果 DataFrame 的行索引
squeeze : True 表示在可能的情况下降低结果对象的维度
首先将行索引的每个值传入 lambda 表达式,再按照处理之后的数据进行分组,然后进行聚合
当参数 by 的值为字典时
对不同的列可以采用不同的函数,通过 aggregate 指定聚合的方式
使用 agg() 方法可以直接对指定列进行聚合
使用 agg() 方法对分组结果进行聚合
异常值:严重超出正常范围的数值
处理方法:确定正常范围,根据实际情况对异常值进行调整
dropna(axis=0, how='any', thresh=None, subset=None)
常用参数
axis : 0 表示按照行索引删除,1 表示按照列名删除
how : any 表示只要某行包含缺失值就丢弃,all 表示某行全部为缺失值才丢弃
thresh : 用来指定保留包含几个非缺失值数据的行
subset : 用来指定在判断缺失值时只考虑哪些列
首先,判断数据中是否含缺失值
然后,筛选出含有缺失值的行
注:df['交易额'] 与 df.交易额 在功能上等价
在对缺失值处理之前,复制一份数据,以免接下来的操作影响原来的数据
处理缺失值
查看处理后的结果
fillna(value=None, method=None, limit=None, inplace=False)
常用参数
value : 指定要替换的值,可以是标量、字典、Series 或 DataFrame
method : 指定填充缺失值的方式,pad 或 ffill 表示使用扫描过程中遇到的最后一个有效值一直填充到下一个有效值;backfill 或 bfill 表示使用缺失值之后遇到的第一个有效值填充前面遇到的所有连续缺失值
limit : 指定设置了参数 method 时最多填充多少个连续的缺失值
inplace : True 表示原地排序,False 表示返回一个新的 DataFrame
duplicated(subset=None, keep='first')
常用参数
subset : 指定判断不同行数据是否重复时依据的一列或多列,默认使用整行所有列的数据进行比较
keep : 'first' 表示重复数据的第一次出现标记为 False;'last' 表示重复数据的最后一次出现标记为 False;False 表示标记所有重复数据为 True
drop_duplicates(subset=None, keep='first', inplace=False)
常用参数
subset : 指定判断不同行数据是否重复时依据的一列或多列,默认使用整行所有列的数据进行比较
keep : 'first' 表示重复数据的第一次出现标记为 False;'last' 表示重复数据的最后一次出现标记为 False;False 表示标记所有重复数据为 True
inplace : True 表示原地排序,False 表示返回一个新的 DataFrame
diff(periods=1, axis=0)
常用参数
periods : 指定差分的跨度,periods=1 且 axis=0 表示每一行数据减去紧邻的上一行数据;periods=2 且 axis=0 表示每一行减去上面第二行的数据,结果作为新的 DataFrame 中的一项
axis : 0 按行进行纵向差分;1 按列进行横向差分
透视表用来根据一个或多个键进行聚合,把数据分散到对应的行和列上去,是数据分析常用技术之一。
pivot(index=None, columns=None, values=None)
常用参数
index : 指定使用哪一列数据作为结果 DataFrame 的索引
columns : 指定使用哪一列数据作为结果 DataFrame 的列名
values : 指定使用哪一列数据作为结果 DataFrame 的值
pivot_table(index=None, columns=None, values=None, aggfunc='mean', fill_value=None, margins=False, margins_name='All', dropna=True)
常用参数
index : 指定使用哪一列数据作为结果 DataFrame 的索引
columns : 指定使用哪一列数据作为结果 DataFrame 的列名
values : 指定使用哪一列数据作为结果 DataFrame 的值
aggfunc : 指定数据的聚合方式
fill_value : 指定把透视表中的缺失值替换为什么值
margins : 指定是否显示边界以及边界上的数据
margins_name : 指定边界数据的索引名称和列名
dropna : 指定是否丢弃缺失值
交叉表是一种特殊的透视表,往往用来统计频次,也可以使用参数 aggfunc 指定聚合函数实现其他功能。
crosstab(index, columns, values=None, aggfunc=None, rownames=None, colnames=None)
常用参数
index : 指定使用哪一列数据作为结果 DataFrame 的索引
columns : 指定使用哪一列数据作为结果 DataFrame 的列名
values : 指定使用哪一列数据作为结果 DataFrame 的值
aggfunc : 指定聚合函数,默认为统计次数
rownames : 指定行索引的名字,如果不指定,直接使用参数 index 指定的列名
colnames : 指定列索引的名字,如果不指定,直接使用参数 columns 指定的列名
前提:保证 index 为日期时间型数据
resample(rule, how=None, label=None, on=None)
常用参数
rule : 指定重采样的时间间隔,例如 '7D' 表示每 7 天采样一次
how : 指定如何处理两个采样时间之间的数据
label : left 表示使用采样周期的起始时间作为结果 DataFrame 的 index;right 表示使用采样周期的结束时间作为结果 DataFrame 的 index
on : 指定根据哪一列进行重采样,默认根据 index 进行重采样,如果进行指定,要求该列数据为日期时间类型
DataFrame 结构支持多个索引,既可以在读取数据时使用 index_col 指定多列
,也可以通过 groupby() 方法分组时指定多个索引
。对于含有多个索引的 DataFrame 结构,在使用 sort_index() 方法按索引排序
、使用 groupby() 方法进行分组
时,都可以使用参数 level 指定哪一级索引进行排序或分组
DataFrame 数据中的日期时间列
支持 dt 接口,该接口提供了 dayofweek(周几)、dayofyear(一年的第几天)、is_leap_year(是否为闰年)、quarter(哪个季度)、weekday_name(周几) 等属性和方法
注:dayofweek 和 weekday_name 都是周几,weekday_name 是英文,dayofweek 是 0-6 的数字
DataFrame 数据中的字符串列
支持 str 接口,该接口提供了 center、contains、count、endswith、find、extract、lower、split 等属性和方法
折线图
、柱状图
、饼状图
等各种图形,绘图时会自动调用 matplotlib 扩展库的绘图功能concat(objs, axis=0)
常用参数
objs : 表示包含多个 Series、DataFrame 或 Panel 对象的序列
axis : 0 按行连接;1 按列连接
merge(right, how='inner', on=None, left_on=None, right_on=None)
常用参数
right : 另一个 DataFrame 结构
how : 表示数据连接的方式。取值可以是 'left'、'right'、'outer'、'inner'
on : 指定连接时依据的列名或包含若干列名的列表,要求指定的列名在两个 DataFrame 中都存在,如果没有任何参数指定连接键则根据两个 DataFrame 的列名交集进行连接
left_on : 指定连接时依据的左侧列名标签
right_on : 指定连接时依据的右侧列名标签
join(other, on=None, how='left', lsuffix='', rsuffix='')
常用参数
other : 右表
on : 指定连接时依据的左表列名,如果不指定则按左表索引的值进行连接
how : 表示数据连接的方式。取值可以是 'left'、'right'、'outer'、'inner'
lsuffix : 指定列名的后缀
rsuffix : 指定列名的后缀
Python 数据分析与数据可视化(一)Python 开发环境搭建与编码规范
Python 数据分析与数据可视化(二)数据类型、运算符与内置函数
Python 数据分析与数据可视化(三)列表、元组、字典、集合与字符串
Python 数据分析与数据可视化(四)文件操作
Python 数据分析与数据可视化(五)线性代数基本知识
Python 数据分析与数据可视化(六)numpy 数组和矩阵运算
Python 数据分析与数据可视化(七)pandas数据分析实战
Python 数据分析与数据可视化(八)sklearn机器学习实战
Python 数据分析与数据可视化(工具篇)课程所需扩展库安装
Python 数据分析与数据可视化(实践篇)泰坦尼克号旅客生存预测