pandas的认识与dataframe的认识 day04课件代码
01-作业:多个柱状图的绘制案例
import matplotlib.pyplot as plt
import numpy as npdef build_data():"""构建数据:return:数据"""res = np.load("./国民经济核算季度数据.npz")columns = res["columns"]values = res["values"]print(columns)print(values)return columns, valuesdef plot_data(columns, values, min_i, max_i, title, xlabel, ylabel, legend_index, year_index):""":param columns: 列名:param min_i: 最小的列下标:param max_i: 最大的列下标:param title: 标题:param xlabel: 横轴标题:param ylabel: 纵轴标题:param legend_index: 图例:param values:数据:param year_index:年份行数下标:return:"""# 设置横轴x = np.arange(1, max_i - min_i + 2)# 设置纵轴height = values[year_index, min_i:(max_i + 1)]plt.bar(x, height, width=0.5)# 进行标注for i, j in zip(x, height):plt.text(i, j + 100, "%.2f亿元" % j, horizontalalignment='center')## 增加标题plt.title(title)## 设置横纵轴的标题plt.xlabel(xlabel)plt.ylabel(ylabel)## 修改刻度xticks = [tmp[:legend_index] for tmp in columns[min_i:max_i + 1]]# 设置刻度plt.xticks(x, xticks)def show_data(columns, values):"""结果展示:param columns: 列名:param values: 数据:return: None"""# 1、创建画布fig = plt.figure(figsize=(20, 12), dpi=120)# 支持中文与负号plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False# 添加子图fig.add_subplot(2, 2, 1)title = "2000年第一季度各产业生产总值柱状图"xlabel = "产业"ylable = "生产总值(亿元)"plot_data(columns, values, 3, 5, title, xlabel, ylable, legend_index=4, year_index=0)fig.add_subplot(2, 2, 2)title = "2017年第一季度各产业生产总值柱状图"plot_data(columns, values, 3, 5, title, xlabel, ylable, legend_index=4, year_index=-1)fig.add_subplot(2, 2, 3)title = "2000年第一季度各行业生产总值柱状图"xlabel = "行业"ylable = "生产总值(亿元)"plot_data(columns, values, 6, 14, title, xlabel, ylable, legend_index=2, year_index=0)fig.add_subplot(2, 2, 4)title = "2017年第一季度各行业生产总值柱状图"plot_data(columns, values, 6, 14, title, xlabel, ylable, legend_index=2, year_index=-1)# 保存图片plt.savefig("./2000、2017年第一季度各产业、行业生产总值柱状图.png")plt.show()def main():"""主函数:return:"""# 构建数据columns, values = build_data()# 展示结果show_data(columns, values)if __name__ == '__main__':main()
02-饼图的绘制
import numpy as np
import matplotlib.pyplot as plt"""
饼图----将各部分全部绘制在同一个饼中,可以提现出各部分的占比
应用场景:对比各部分的占比情况也可以对比部分与整体的关系
"""def build_data():"""加载数据:return:"""res = np.load("./国民经济核算季度数据.npz")# for tmp in res:# print(tmp)columns = res['columns']values = res['values']return columns, valuesdef show_data(columns, values):"""数据可视化:param columns: 数据:param values: 数据:return: None"""# 1、创建画布plt.figure()# 支持中文与负号plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False# 2、绘制图形# 绘制饼图# 构建绘制饼图的数据x = values[-1, 3:6]# explode --->表示各部分距离圆心的半径---也可以理解为 各部分之间的间隙explode = (0.01, 0.02, 0.01) # 占半径的占比# labels ---每一项的名称labels = [tmp[:4] for tmp in columns[3:6]]# colors --设置颜色colors = ['pink', 'r', 'y']# autopct ---用来显示各部分占比autopct = "%.1f%%"# pctdistance --- 控制着标注的位置,默认为距离圆心0.6个半径的位置pctdistance = 0.6# labeldistance ---控制着名称的位置,默认为距离圆心1.1个半径的位置labeldistance = 1.1# radius ---表示饼图的半径radius = 1.0plt.pie(x, explode=explode, labels=labels, colors=colors, autopct=autopct, pctdistance=pctdistance,labeldistance=labeldistance, radius=radius)# 将饼图由椭圆 变为圆形# 椭圆里面 有个长轴、短轴 --->长轴=短轴--->圆plt.axis('equal')# 增加标题plt.title("2017年各个产业的增加总值占比情况")# 设置图例plt.legend(labels)# 保存图片plt.savefig("./2017年各个产业的增加总值占比情况.png")# 3、图形展示plt.show()def main():"""主函数:return:"""# 1、构建数据columns, values = build_data()print("columns:\n", columns)print("values :\n", values)# 2、数据可视化show_data(columns, values)if __name__ == '__main__':main()
03-箱线图绘制
import numpy as np
import matplotlib.pyplot as plt"""
箱线图---利用最小值、下四分位数、中位数、上四分位数、最大值来进行描述数据
-----可以用来查看数据的是否对称、离散、分布
----别的功能:----借助箱线图分析剔除异常值(远离正常范围的错误的值)
"""def build_data():"""加载数据:return:"""res = np.load("./国民经济核算季度数据.npz")# for tmp in res:# print(tmp)columns = res['columns']values = res['values']return columns, valuesdef show_data(columns, values):"""数据可视化:param columns: 数据:param values: 数据:return: None"""# 1、创建画布plt.figure()# 支持中文与负号plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False# 2、绘制图形# 绘制箱线图x = (values[:, 3], values[:, 4], values[:, 5])# x = (values[:, 3],)# 缺口# meanline=True,showmeans=True 同时使用,才能在箱线图上显示出均值# vert=False ---绘制水平的箱子# labels 名称labels = [tmp[:4] for tmp in columns[3:6]]# sym --异常值的形状plt.boxplot(x, notch=True, meanline=True, showmeans=True, labels=labels,sym='*')# plt.boxplot(x, notch=True, meanline=True, showmeans=True)# 3、图形展示plt.show()def main():"""主函数:return:"""# 1、构建数据columns, values = build_data()print("columns:\n", columns)print("values :\n", values)# 2、数据可视化show_data(columns, values)if __name__ == '__main__':main()# 了解更多:https://matplotlib.org/gallery/index.html
04-pandas的认识
"""
numpy ---科学计算库
结构核心:ndarray连续内存的、存储单一数据类型的、多维的数组对象matplotlib---数据可视化库
能绘制2-d、3-d图
绘图三部曲:1、创建画布2、绘制图形3、图形展示
pandas --- 专门用于进行数据处理的库
内部封装了numpy matplotlib部分的功能 ---pandas内部也可以进行统计分析、数据可视化
结构核心:1、Series--一维结构--可以通过一维数组、列表来生成,也可以通过获取dataframe中的一列来生成--只有行索引,没有列索引2、DataFrame ---重中之重---二维结构---可以通过二维数组、大字典来生成---既有行索引,又有列索引3、pannel --三维结构(了解)
"""
import numpy as np
import pandas as pd# 加载数据
res = np.load("./国民经济核算季度数据.npz")
columns = res['columns']
values = res['values']
print("columns :\n", columns)
print("values :\n", values)
# 将columns与 values 拼接成一个二维数组
# data = np.vstack((columns,values))
# print("data:\n",data)# 构建df 的行名称
index_content = ["index_" + str(i) for i in range(values.shape[0])]
print("index_content:\n", index_content)# 将二维数组转化为dataframe
# dataframe 相比于二维数组,多了行名称(行索引)、列名称(列索引)
df = pd.DataFrame(data=values,columns=columns,index=index_content
)
print("df:\n", df)
print("df 的类型:\n", type(df))# 自己创建dataframe
# 利用大字典创建dataframe
# df = pd.DataFrame(
# data={# "name": ['zs', 'ls', 'ww', 'oo', 'hh', 'jj', 'gg', 'kk'],
# "high": [178.0, 179, 165.5, 160.5, 168.6, 172.0, 182, 189.0],
# "score": [99, 98, 97, 90, 89, 99, 96.5, 88.5],
# 'class': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
# 'group': ['1', '1', '2', '2', '1', '1', '2', '2']
# },
# index=["stu_1", "stu_2", "stu_3", "stu_4", "stu_5", "stu_6", "stu_7", "stu_8"]
# )
# print("df:\n", df)
# print("df 的类型:\n", type(df))# 获取 df里面的时间这一列
# 从df中取出一列,就是Series,只有行名称,没有列名称
# se = df['时间']
# print("se:\n",se)
# print("se 的类型:\n",type(se))# 自己创建一个series
# 利用列表、一维数组来生成series
se = pd.Series(data=np.array(['zs', 'ls', 'ww', 'oo', 'hh', 'jj', 'gg', 'kk']),index=["stu_1", "stu_2", "stu_3", "stu_4", "stu_5", "stu_6", "stu_7", "stu_8"]
)print("se:\n", se)
print("se 的类型:\n", type(se))
05-panda对于文件的保存和读取
import pandas as pd"""
1、文本文件 ----由若干行字符构成的计算机文件,它是一种典型的顺序文件csv文件---默认以逗号分隔的一种文本文件
2、excel文件--以.xlsx 、.xls为结尾的表格文件
"""
# sep ,delimiter ---分隔符# 读取文本文件
# data = pd.read_table(
# filepath_or_buffer="./meal_order_info.csv", # 路径+ 名称
# delimiter=",", # 分隔符
# header='infer', # 列名称为自动识别
# # header=0, # 可以手动的指定某一行为列名称
# encoding="ansi", # 编码格式
# # usecols=[0, 1], # 可以指定只读取指定的列
# # index_col=0, # 指定某一列 为行索引
# nrows=5, # 指定读取前n行数据
# )# 其它的参数可以参考 read_table
# data = pd.read_csv(
# filepath_or_buffer="./meal_order_info.csv", # 路径+ 名称
# encoding='ansi'
# )# 加载excel文件
data = pd.read_excel(io="./meal_order_detail.xlsx", # 路径+ 名称sheetname=0, # 读取的表的序号header=0, # 列索引名称# index_col # 可以指定某一列为行索引# parse_cols=[0, 1] # 某些版本起作用,可以用来读取指定的列
)
print("data:\n", data)
print("data 的类型:\n", type(data))# pandas中的读取操作---pd.read_xxxx()
# pandas 中的保存操作---df.to_xxx()
# 将data 保存为csv文件
# data.to_csv(
# path_or_buf="./jj.csv", # 保存的文件的路径+ 名称
# sep=',', # 分隔符
# header=False, # 保存的时候保存列名称 # 置为False 则不保存列名称
# index=False, # 保存的时候保存行名称 # 置为False 则不保存行名称
# mode='a', # 重写模式
# )
06-dataframe属性
import pandas as pd# 加载detail
data = pd.read_excel("./meal_order_detail.xlsx")
# print("data:\n", data)
# print("data 的类型:\n", type(data))
# print("*" * 100)# values index columns dtypes size ndim shape
# print("data 的维度:\n", data.ndim)
# print("data 的形状:\n", data.shape)
# print("data 的元素的个数:\n", data.size)# print("data 的行索引:\n",data.index)
# print("data 的列索引:\n",data.columns)# pd.DataFrame 将二维数组转化为df, 也可以通过df.values 将df转化为二维数组
# print("data 的values :\n", data.values)
# print("data 的values的类型 :\n", type(data.values))# 返回每一列的元素的数据类型
# print("data 的元素的数据类型:\n", data.dtypes)# 构建series
se = data['dishes_name']
print('se:\n', se)
print("se 的类型:\n", type(se))print("se 的形状:\n", se.shape)
print("se 的维度:\n", se.ndim)print("se 的元素个数:\n", se.size)
print("se 的元素的数据类型:\n", se.dtypes)print("se 的values \n", se.values)print("se 的行索引 :\n", se.index)
07-dataframe的查询操作
import pandas as pd# 加载detail
data = pd.read_excel("./meal_order_detail.xlsx")data.index = ["index_" + str(i) for i in range(data.shape[0])]print('data:\n', data)
print('data 的列索引名称:\n', data.columns)
print("*" * 100)# dataframe 索引的第一种方式 ---先列后行 ---先后索引
# 获取某一列元素--dishes_name
# print("获取 dishes_name 列:\n", data['dishes_name'])# 获取某一列元素的 前n行数据 --下标切片
# print('获取单列的 前n行数据:\n', data['dishes_name'][:5])
# 获取某一列元素的 前n行数据 ---head()
# print('获取单列的 前n行数据:\n', data['dishes_name'].head(10))
# 获取某一列元素的 后 n行数据 ---下标切片
# print('获取某一列元素的 后 n行数据:\n', data['dishes_name'][-5:])
# 获取某一列元素的 后 n行数据 ---tail()
# print('获取某一列元素的 后 n行数据:\n', data['dishes_name'].tail(10))
# 获取某一列元素的 前n行数据 --- 行名称列表
# print('获取单列的 前n行数据:\n', data['dishes_name'][['index_0', 'index_1', 'index_2']])
# 获取某一列元素的 前n行数据 ---行名称切片
# print('获取单列的 前n行数据:\n', data['dishes_name']['index_0':'index_2'])# 获取多列元素---dishes_name detail_id order_id
# print("获取多列元素 :\n",data[['dishes_name','detail_id','order_id']])# 获取多列元素的前n行 ---下标切片 --后n行---下标切片
# print("获取多列元素的前n行 :\n",data[['dishes_name','detail_id','order_id']][:5])
# 获取多列元素的前n行 ---head() ---后n 行tail
# print("获取多列元素的前n行 :\n", data[['dishes_name', 'detail_id', 'order_id']].head(10))# 注意:::: ----获取多列元素的前n行 --不可以使用 行名称列表
# print("获取多列元素的前n行 :\n", data[['dishes_name', 'detail_id', 'order_id']][['index_0', 'index_1', 'index_2']]) # 不能使用
# 获取多列元素的前n行 ------行名称切片
# print("获取多列元素的前n行 :\n", data[['dishes_name', 'detail_id', 'order_id']]['index_0':'index_2'])
08-dataframe的增加操作
import pandas as pd# 加载users
data = pd.read_excel('./users.xlsx')
print("data:\n", data)
print('data 的列索引:\n', data.columns)# 给data 添加一列 next_year_age
# data['next_year_age'] = data['age'] + 1data.loc[:,'next_year_age'] = data.loc[:,'age'] + 1print(data)
pandas的认识与dataframe的认识 day04课件代码相关推荐
- pandas索引复合索引dataframe数据、索引其中一个水平(level)的所有数据行(index all rows in a level)
pandas索引复合索引dataframe数据.索引其中一个水平(level)的所有数据行(index all rows in a level) 目录
- pandas索引复合索引dataframe数据、索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)、使用元组tuple表达复合索引的指定行
pandas索引复合索引dataframe数据.索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value).使用元组tuple表达复合索引的指定行 目 ...
- pandas索引复合索引dataframe数据、索引其中一个水平(level)的所特定数据行、指定数据行(index a row of a level)、使用元组tuple表达复合索引的指定行
pandas索引复合索引dataframe数据.索引其中一个水平(level)的所特定数据行.指定数据行(index a row of a level).使用元组tuple表达复合索引的指定行 目录
- pandas索引复合索引dataframe数据、索引其中多个水平(level)的多个数据行(index rows from different levels)、使用元组tuple表达复合索引的指定行
pandas索引复合索引dataframe数据.索引其中多个水平(level)的多个数据行(index rows from different levels and combine).使用元组tupl ...
- pandas索引复合索引dataframe数据、索引其中一个水平(level)的特定数据列(index a column of a level)
pandas索引复合索引dataframe数据.索引其中一个水平(level)的特定数据列(index a column of a level) 目录
- pandas创建复合索引dataframe仿真数据集实战(create a multiIndex dataframe)
pandas创建复合索引dataframe仿真数据集实战(create a multiIndex dataframe) 目录 pandas创建复合索引dataframe仿真数据集实战(create a ...
- pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数
pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数 目录 pandas比较两个da
- pandas中两个dataframe的交集和差集
Pandas中两个dataframe的交集和差集_ljp1919的专栏-CSDN博客_pandas 差集
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一、pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主
利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍 一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目 ...
- Python实训day09am【Pandas、Series、DataFrame数据帧】
Python实训-15天-博客汇总表 目录 1.Pandas 1.1.安装Pandas库 1.2.两种数据对象 2.一列数据Series 2.1.获取Series与数据个数 2.2.切片-loc-il ...
最新文章
- Unity iPhone Touch Animation Tutorial,untiy3d iphone简单动画开发教程
- 用户控件的定制和使用
- NR 5G 非3GPP 接入到核心网络的安全性
- Android应用插件式开发解决方法[转]
- 【Ubuntu】 使用Xshell5连接Ubuntu16.04
- 华为交换机linux版本号,Cisco和华为交换机常用配置命令总结
- Vue 给第三方组件加入自定义参数
- Apache 分割日志
- oracle日期函数函数,Oracle日期函数
- postman工具 如何传递当前时间戳和MD5加密
- css伪类设置小标签
- 个推mastersecret_个推 服务端 SDK
- AppStore算法再次升级,运营如何在ASO中破冰?
- 论文阅读:[2019 TSE] A Theoretical and Empirical Analysis of Program Spectra Diagnosability
- oracle角色数达到上限,ROLE启用个数限制
- tiledmap 图块属性_Tiled Editor 图块的两种导入方式
- CSS初始化样式应该怎么写
- 用飞信批量加好友——解放鼠标,更解放你的手!
- torch当中的MseLoss的reduction参数
- “北斗一号”卫星导航定位系统与GPS的区别