Python 数据分析与数据可视化(七)pandas数据分析实战

文章目录

7.1 pandas 常用数据类型

常用的数据结构

Series 					带标签的一维数组
DatetimeIndex			时间序列
DataFrame				带标签且大小可变的二维表格结构
Panel					带标签且大小可变的三维数组

7.1.1 一维数组与常用操作

  Series 是 pandas 提供的一维数组,由索引和值两部分组成,是一个类似于字典的结构

7.1.1.1 创建 Series

# 1. 通过 range 对象或列表创建,使用默认索引
s1 = pandas.Series(range(1, 20, 5))

# 2. 通过字典创建,使用键作为索引
s2 = pandas.Series({'语文':90, '数学':93, 'Python':92, '物理':91})

7.1.1.2 修改指定索引对应的值

s1[3] = -17
s2['语文'] = 94

7.1.1.3 对所有数据求绝对值

abs(s1)

7.1.1.4 对所有数据加 5

s1 + 5

7.1.1.5 对每行索引加前缀

#	0	->	20
#	1	->	21
#	2	->	22
#	.	.	.
#	.	.	.
#	.	.	.
s1.add_prefix(2)

7.1.1.6 对每行索引加后缀

#	语文		->	语文_张三
#	数学		->	数学_张三
#	Python	->	Python_张三
#	物理		->	物理_张三
s1.add_suffix('_张三')

7.1.1.7 数组数据的直方图

s2.hist()
matplotlab.show()

7.1.1.8 获取最大值的索引

s2.argmax()

7.1.1.9 测试数组的值是否在指定区间内

# 返回一个元素为 boolean 类型的 Series
s2.between(90, 94, inclusive=True)

7.1.1.10 查看数组中 90 分以上的数据

s2[s2>90]

7.1.1.11 获取数组的中值

s2.median()

7.1.1.12 查看数组中大于中值的数据

s2[s2>s2.median()]

7.1.1.13 数组与数字之间的运算

# 先对数组中所有数据开平方,然后扩大 10 倍,对结果四舍五入后保留一位小数
round((s2**0.5)*10, 1)

7.1.1.14 获取数组中最小的 2 个值

s2.nsmallest(2)

7.1.1.15 两个 Series 对象之间的运算

  只有两个等长的 Series 对象之间可以进行四则运算和幂运算,并且只对两个 Series 对象中都有的索引对应的值进行运算,非共同索引对应的值为控制 NaN

7.1.1.16 pipe 实现函数链式调用

s2.pipe(lambda x:x+3).pipe(lambda x:x*3)

7.1.1.17 apply 对 Series 的值进行函数运算

s2.apply(lambda x:x+3)

7.1.1.18 标准差、无偏方差、无偏标准差

s2.std()
s2.var()
s2.sem()

7.1.1.19 查看是否存在等价于 True 的值

any(s2)

7.1.1.20 查看是否所有值都等价于 True

all(s2)

7.1.2 时间序列与常用操作

7.1.2.1 date_range() 创建时间序列

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(年初第一天)

在这里插入图片描述

7.1.2.2 使用时间序列做索引,创建 Series 对象

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))

7.1.2.3 操作使用时间序列做索引的 Series 对象

7.1.2.3.1 切片取数据
data[:5]
7.1.2.3.2 三分钟重采样并计算均值
data.resample('3H').mean()
7.1.2.3.3 五小时重采样并求和
data.resample('3H').sum()
7.1.2.3.4 五小时重采样并统计 OHLC 值
# OHLC 表示 OPEN(第一个数)、HIGH(最大的数)、LOW(最小的数)、CLOSE(最后的数)
data.resample('3H').ohlc()
7.1.2.3.5 替换索引
# 索引中的所有日期加一天
data.index = data.index + pd.Timedelta('1D')

7.1.2.4 Timestamp

7.1.2.4.1 创建 Timestamp 对象
day = pd.Timestamp('20190323')
7.1.2.4.2 查看指定日期是周几
day.weekday_name
7.1.2.4.3 查看指定日期时间所在年是否是闰年
pd.Timestamp('201903230800').is_leap_year
7.1.2.4.4 查看指定日期所在的季度和月份
day.quarter, day.month
7.1.2.4.5 转化为 Python 的日期时间对象
day.to_pydatetime()

7.1.3 二维数组 DataFrame

7.1.3.1 布局结构

在这里插入图片描述

7.1.3.2 创建 DataFrame

7.1.3.2.1 普通参数作为索引的 DataFrame
pd.DataFrame(np.random.randint(1, 20, (5, 3)),
			 index=range(5),
			 columns=['A', 'B', 'C'])
7.1.3.2.2 时间序列作为索引的 DataFrame
pd.DataFrame(np.random.randint(5, 15, (13, 3)),
			 index=pd.date_range(start='201907150900',
								 end='201907152100',
								 freq='H'),
			 columns=['熟食', '化妆品', '日用品'])
7.1.3.2.3 使用字典创建 DataFrame
# 字典的键会作为列名
pd.DataFrame({'语文':[22,23,56,78],
			  '数学':[45,13,76,78],
			  '英语':[23,28,24,96]},
			 index=['张三', '李四', '王五', '赵六']
7.1.3.2.4 创建 DataFrame 时自动扩充数据
# 未指定 index,使用默认索引,键作为 columns,第一列有 5 个值,第二列只有 1 个值,自动对 B 列进行扩充,使其与 A 列数据一样多
pd.DataFrame({'A':range(5), 'B':3})

7.2 DataFrame 数据处理与分析实战

7.2.1 测试数据

在这里插入图片描述

7.2.2 读取数据

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 : 指定哪些值被解释为缺失值

在这里插入图片描述

7.2.3 设置列对齐

pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

在这里插入图片描述

7.2.4 筛选符合特定条件的数据

7.2.4.1 对行进行切片

在这里插入图片描述
注:切片操作左闭右开
在这里插入图片描述
注:先取列,后取行
在这里插入图片描述
注:先取行,后取列

7.2.4.2 iloc 使用数字做索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2.4.3 loc 和 at 使用标签文本做索引

在这里插入图片描述
loc 可以用来索引多行或多列数据
在这里插入图片描述
at 不能用来索引多行或多列数据

7.2.4.4 其他操作

  1. DataFrame 可以 bool 类型 Series 作为索引
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 对数据求和
    在这里插入图片描述

7.2.5 查看数据特征和统计信息

7.2.5.1 查看所有列的统计信息

在这里插入图片描述

7.2.5.2 查看指定列的统计信息

数值列
在这里插入图片描述

非数值列
在这里插入图片描述

7.2.5.3 查看四分位数

在这里插入图片描述

7.2.5.4 查看中值

在这里插入图片描述

7.2.5.5 查看指定数量的最小记录

在这里插入图片描述

7.2.5.6 查看指定数量的最大记录

在这里插入图片描述

7.2.5.7 查看最大值

在这里插入图片描述

7.2.5.8 查看最小值

在这里插入图片描述

7.2.5.9 查看最大值的行下标

在这里插入图片描述

7.2.5.10 查看最小值的行下标

在这里插入图片描述

7.2.6 按照不同标准对数据排序

7.2.6.1 sort_index

根据行索引或列名排序

sort_index(axis=0, ascending=True, inplace=False)

常用参数
axis : 0 表示按照行索引排序,1 表示按照列名排序
ascending : True 表示升序排序,False 表示降序排序
inplace : True 表示原地排序,False 表示返回一个新的 DataFrame

在这里插入图片描述
扩展:汉字的 Unicode 编码通过内置函数 ord() 查看

7.2.6.2 sort_values

根据值排序

sort_values(by, ascending=True, na_position='last')

常用参数
by : 指定排序依据的一个列或多个列(多个列以列表形式给出)
ascending : True 表示升序排序,False 表示降序排序;可以通过传入 bool 列表(长度与 by 指定的列表长度相等)为不同的列指定不同的顺序
na_position : last 表示把缺失值放在最后面,first 表示把缺失值放在最前面

在这里插入图片描述
在这里插入图片描述

7.2.7 使用分组与聚合对员工业绩进行汇总

聚合:对分组后的每一组数据再次调用聚合函数,包括求和、求均值、求中值等

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() 方法对分组结果进行聚合
在这里插入图片描述

7.2.8 处理超市交易数据中的异常值

异常值:严重超出正常范围的数值
处理方法:确定正常范围,根据实际情况对异常值进行调整
在这里插入图片描述

7.2.9 处理超市交易数据中的缺失值

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

 还可以使用 fillna() 方法填充缺失值
在这里插入图片描述

7.2.10 处理超市交易数据中的重复值

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

 处理重复值
在这里插入图片描述
 此外,可以查看是否有录入错误的工号和姓名
在这里插入图片描述

7.2.11 使用数据差分查看员工业绩波动情况

diff(periods=1, axis=0)

常用参数
periods : 指定差分的跨度,periods=1 且 axis=0 表示每一行数据减去紧邻的上一行数据;periods=2 且 axis=0 表示每一行减去上面第二行的数据,结果作为新的 DataFrame 中的一项
axis : 0 按行进行纵向差分;1 按列进行横向差分

在这里插入图片描述

7.2.12 使用透视表查看业绩汇总数据

 透视表用来根据一个或多个键进行聚合,把数据分散到对应的行和列上去,是数据分析常用技术之一。

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 : 指定是否丢弃缺失值

 margin=True 会在结果中多加一行和一列
在这里插入图片描述
在这里插入图片描述

7.2.13 使用交叉表查看业绩汇总数据

 交叉表是一种特殊的透视表,往往用来统计频次,也可以使用参数 aggfunc 指定聚合函数实现其他功能。

crosstab(index, columns, values=None, aggfunc=None, rownames=None, colnames=None)

常用参数
index : 指定使用哪一列数据作为结果 DataFrame 的索引
columns : 指定使用哪一列数据作为结果 DataFrame 的列名
values : 指定使用哪一列数据作为结果 DataFrame 的值
aggfunc : 指定聚合函数,默认为统计次数
rownames : 指定行索引的名字,如果不指定,直接使用参数 index 指定的列名
colnames : 指定列索引的名字,如果不指定,直接使用参数 columns 指定的列名

在这里插入图片描述
在这里插入图片描述

7.2.14 使用重采样技术按时间段查看员工业绩

前提:保证 index 为日期时间型数据

resample(rule, how=None, label=None, on=None)

常用参数
rule : 指定重采样的时间间隔,例如 '7D' 表示每 7 天采样一次
how : 指定如何处理两个采样时间之间的数据
label : left 表示使用采样周期的起始时间作为结果 DataFrame 的 index;right 表示使用采样周期的结束时间作为结果 DataFrame 的 index
on : 指定根据哪一列进行重采样,默认根据 index 进行重采样,如果进行指定,要求该列数据为日期时间类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2.15 多索引相关技术与操作

 DataFrame 结构支持多个索引,既可以在读取数据时使用 index_col 指定多列,也可以通过 groupby() 方法分组时指定多个索引。对于含有多个索引的 DataFrame 结构,在使用 sort_index() 方法按索引排序使用 groupby() 方法进行分组时,都可以使用参数 level 指定哪一级索引进行排序或分组
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2.16 使用标准差与协方差分析员工业绩

  1. 关于标准差
     如果标准差较大,则代表大部分数值和其平均值之间差异较大;如果标准差较小,则代表这些数值较接近平均值
    通过 std() 方法实现
  2. 关于协方差
     对于多组数据,可以使用协方差描述数据之间的相关性,如果两组数据 X 和 Y 的协方差 cov(X, Y) 的值为正值,说明两者正相关,结果为负值就说明负相关,如果为 0,认为两组数据在统计上“相互独立”。
    通过 cov() 方法实现
  3. 关于协方差矩阵
     为了便于分析多组数据之间的相关性,可以使用协方差矩阵。协方差矩阵对角线上分别是 X 和 Y 的方差,非对角线上是协方差。协方差大于 0 表示 X 和 Y 若其中一个增加,另一个也会增加;小于 0 表示如果其中一个增加则另一个会减少;为 0 表示,两者独立,其中一个变化时不影响另一个。方差是协方差的一种特殊情况,也就是两个变量相同时的情况

7.2.17 使用pandas的属性接口实现高级功能

  1. DataFrame 数据中的日期时间列支持 dt 接口,该接口提供了 dayofweek(周几)、dayofyear(一年的第几天)、is_leap_year(是否为闰年)、quarter(哪个季度)、weekday_name(周几) 等属性和方法
    注:dayofweek 和 weekday_name 都是周几,weekday_name 是英文,dayofweek 是 0-6 的数字
    在这里插入图片描述
    在这里插入图片描述

  2. DataFrame 数据中的字符串列支持 str 接口,该接口提供了 center、contains、count、endswith、find、extract、lower、split 等属性和方法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

7.2.18 绘制各员工在不同柜台业绩平均值的柱状图

  1. 关于 DataFrame 结构的绘图功能
     DataFrame 结构的 plot() 方法可以直接绘制折线图柱状图饼状图等各种图形,绘图时会自动调用 matplotlib 扩展库的绘图功能
  2. 对 DataFrame 结构中的数据进行可视化时,既可以直接使用 plot() 方法和 kind 参数指定图形的形状,也可以使用 plot 类的 line()、bar() 或其他方法绘制相应形状的图形
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

7.2.19 数据拆分与合并

  1. 拆分
     可以对 DataFrame 使用切片或 loc 等运算按行或列进行拆分,得到多个 DataFrame 结构
  2. 合并
    concat() 、append()、merge()、join() 函数用于合并多个 DataFrame 结构
concat(objs, axis=0)

常用参数
objs : 表示包含多个 Series、DataFrame 或 Panel 对象的序列
axis : 0 按行连接;1 按列连接
  1. 实例一:合并两个 Sheet 中的数据
    在这里插入图片描述
    在这里插入图片描述
     append() 方法将作为参数的 DataFrame 追加到当前 DataFrame 尾部
    在这里插入图片描述
    在这里插入图片描述
  2. merge() 方法
     将当前 DataFrame 和 right 参数指定的 DataFrame 进行合并
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 : 指定连接时依据的右侧列名标签
  1. join() 方法
     可以实现按列对左表(调用 join() 方法的DataFrame)和右表(other 参数指定的 DataFrame)合并。如果右表索引与左表某一列的值相同可以直接连接;如果要根据右表中某一列的值与左表连接,需要先对右表调用 set_index() 方法设定这一列为索引
join(other, on=None, how='left', lsuffix='', rsuffix='')

常用参数
other : 右表
on : 指定连接时依据的左表列名,如果不指定则按左表索引的值进行连接
how : 表示数据连接的方式。取值可以是 'left'、'right'、'outer'、'inner'
lsuffix : 指定列名的后缀
rsuffix : 指定列名的后缀
  1. 实例二
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

其他文章

Python 数据分析与数据可视化(一)Python 开发环境搭建与编码规范
Python 数据分析与数据可视化(二)数据类型、运算符与内置函数
Python 数据分析与数据可视化(三)列表、元组、字典、集合与字符串
Python 数据分析与数据可视化(四)文件操作
Python 数据分析与数据可视化(五)线性代数基本知识
Python 数据分析与数据可视化(六)numpy 数组和矩阵运算
Python 数据分析与数据可视化(七)pandas数据分析实战
Python 数据分析与数据可视化(八)sklearn机器学习实战
Python 数据分析与数据可视化(工具篇)课程所需扩展库安装
Python 数据分析与数据可视化(实践篇)泰坦尼克号旅客生存预测

  • 9
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python数据分析项目源码主要是基于Python编程语言进行数据处理和分析的项目。这些源码通常包括数据收集、数据清洗、数据可视化、数据建模等步骤。例如,在一个电商数据分析项目中,源码可以包括从网站抓取数据、清洗数据、将数据存储到数据库中、使用Python数据分析库(如Pandas、Numpy等)对数据进行统计和分析、使用数据可视化库(如Matplotlib、Seaborn等)进行数据图表展示等。 可视化项目是指使用Python编程语言进行数据可视化的项目。它通常涉及到使用Python可视化库将数据通过图表、图形等形式展示出来,以便更好地理解数据和探索数据中的模式和趋势。例如,在一个销售数据可视化项目中,源码可以包括将销售数据进行处理和准备、使用Python可视化库进行销售数据图表展示(如折线图、柱状图等)、添加交互式特性(如鼠标悬停显示详细信息、筛选器等)以增强数据可视化的交互性。 机器学习实战项目案例是指使用Python编程语言实现的机器学习任务的项目。机器学习是一种人工智能的分支,通过设计和构建算法,使计算机能够从数据中学习并自动改进。机器学习实战项目案例可以涉及各种机器学习算法和任务,如分类、回归、聚类、推荐系统等。使用Python的机器学习库(如Scikit-learn、TensorFlow等)可以实现这些机器学习任务。 综上所述,Python数据分析项目源码、可视化项目和机器学习实战项目案例都是基于Python编程语言进行数据处理、展示和机器学习的项目。这些项目源码和案例可以帮助人们学习和实践数据分析和机器学习的知识和技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值