目录
Pandas的下载
Series
DataFrame
DataFrame的创建
删除操作:
获取操作:
获取列数据:
获取行数据:
根据具体条件获取数据
文件操作
使用jupyter notebook完成文件相关操作
Seaborn可视化
写入MySQL
pandas数据清洗
Pandas的下载 控制台中输入命令:pip install pandas进行下载pandas
pandas下载成功后,会出现上述界面
pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数
pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库灵活的数据处理功能
Series Series是一种类似于一维数组的对象,由数据(各种NumPy数据 类型)以及与之相关的数据标签(即索引)组成
可以通过字典构建Series对象,Series对象的索引也是可以修改的
举例:
import pandas as pddata = https://tazarkount.com/read/[1, 2, 3]series1 = pd.Series(data=data)print(series1, type(series1))# 获取下标为0的数据print(series1[0])print(">" * 70)# 通过字典创建seriesdata1 = {1: "java", 2: "python", 3: "scala"}series2 = pd.Series(data=https://tazarkount.com/read/data1)print(series2, type(series2))# 根据key值进行获取数据print("根据key值获取数据:"+series2[2])print(">" * 70)# 创建series给定下标 根据给定key值进行创建series3=pd.Series(data=https://tazarkount.com/read/data1, index=[2, 3])print(series3) 结果:
相关函数:获取最大值与获取最小值:series1.max();series1.min()
结果:
DataFrame DataFrame是一个表格型的数据结构,它含有一组有序的列,每 列可以是不同的值类型(数值、字符串、布尔值等)
DataFrame既有行索引也有列索引,可以看做由Series组成的字典
DataFrame的创建 DataFrame的创建可以通过字典创建,也可以通过列表创建,在使用列表创建时,默认情况下输出的列名称为数字顺序,可以在创建时加入设置列名称:columns=... ...
# 创建dataframe,通过字典创建data2 = {"Language": ["Python", "java", "scala", "sql"],"application": ["pyspark", "hadoop", "spark", "hive"]}df = pd.DataFrame(data=https://tazarkount.com/read/data2)print(df)# 通过列表创建,可以增加列名称data3 = [["java", "1"], ["Python", "2"], ["scala", "3"]]df2 = pd.DataFrame(data=https://tazarkount.com/read/data3, columns=["Language", "Number"])print(df2) 结果:
当dataframe中只有一列数据时,仍然表示的是一个dataframe,而不是series
data4=[[10],[20],[30]]df3=pd.DataFrame(data4)print(df3,type(df3))
删除操作: 使用Drop方法进行删除操作
格式:DataFrame.drop(labels=["行/列名称"],axis=0:表示行/1:表示列)
当想要进行删除操作时,需要指定删除的是行数据还是列数据
这里的指定有一个变量axis,若在进行删除操作时,不加axis的值,axis默认为0,表示删除行数据
但是这里进行删除后的dataframe是一个新的dataframe,若想使被删除的原dataframe在删除后变为删除后的表,需要使用inplace方法进行替换
格式:DataFrame.drop(labels=["行/列名称"],axis=0:表示行/1:表示列,inplace=True)
这里的inplace默认为False
# 删除df2中的列数据Numberdf4=df2.drop(labels=["Number"], axis=1)print(df4)# 这里删除后的数据存到了df4中,df2中并未被删除#使用inplace使df2中数据也被删除print(">" * 70)df2.drop(labels=["Number"], axis=1, inplace=True)print(df2) 结果:
获取操作: dataframe中进行获取数据时,有多种获取数据的方法
获取列数据: 1、通过key(列)获取数据
2、通过.+列名称进行获取
获取行数据: 1、通过dataframe.loc[index(行下标)]进行获取固定下标的一行数据
2、通过dataframe.head()进行从前获取5行数据
3、通过dataframe.tail()进行从后获取5行的数据
举例:
# 获取数据,通过key(列)进行获取print(">" * 70)print(df["application"], type(df["application"]))# 通过.列名称获取print(df.application,type(df.application))data5 = {"Language": ["A", "B", "C", "D", "E", "F", "G"],"words": ["a", "b", "c", "d", "e", "f", "g"]}df5 = pd.DataFrame(data5)print(df5.loc[2])# 获取下标为2的数据print(df5.head()) # 获取前5行数据print(df5.tail()) # 获取后5行数据 获取列数据结果:
根据结果得出:通过列进行取值后,取出的数据为一个Series
获取行数据结果:
根据结果得出: 通过行获取的数据,是一个DataFrame
根据具体条件获取数据 创建一个DataFrame,从其中获取到年龄小于18的学生信息
# 创建一个学生DataFramedata6 = {"name": ["张同学", "李同学", "王同学"],"age": [17, 19, 16]}df6 = pd.DataFrame(data=https://tazarkount.com/read/data6)print(df6)# 获取年龄小于18的结果print("----获取年龄小于18的结果----")print(df6["age"] < 18)# 进一步获取年龄小于18的同学的信息print("----进一步获取年龄小于18的同学的信息----")print(df6[df6["age"] < 18]) 结果:
使用describe可以针对Series或者DataFrame列进行计算汇总统计
对df6进行汇总统计:print(df6.describe())
数据1到3的内容表示他的四分位数
文件操作 pandas提供了一些用于将表格型数据读取为DataFrame对象的函数,常用的函数为read_csv和read_table
read_csv:从文件、URL、文件型对象中加载带分隔符 的数据 。默认分隔符为逗号 。
read_table:从文件、URL、文件型对象中加载带分隔 符的数据 。默认分隔符为制表符(“\t”)
read_csv中可以指定name的值,即读取到的文件存入dataframe中的列名称,使用names=[... ...]
# 读取文件df7 = pd.read_csv("D:\PyCharmProjects\day47\data\students.txt", names=["id", "name", "age", "gender", "clazz"])print(df7)print(df7.head()) 结果:
read_csv/read_table常用参数介绍:
path :表示文件系统位置、URL、文件型对象的字符串
sep/delimiter:用于对行中个字段进行拆分的字符序列或正则表达式
header:用做列名的行号 。默认为0(第一行),若无header行,设为None
names:用于结果的列名列表,结合header=None skiprows: 需要忽略的行数
na_values:一组用于替换NA的值
nrows:需要读取的行数(从文件开始处算起)
verbose:打印各种解析器信息,比如“非数值列中缺失值的数量”
encoding:用于unicode的文本格式编码 。例如,“utf-8”表示用UTF-8 编码的文本
使用jupyter notebook完成文件相关操作 在控制台输入jupyter notebook启动jupyter,跳转页面至网页,没有跳转就手动点击网址跳转
在跳转后的网址中新建一个ipynb文件
点击该名称,可以重命名该文件,初次创建该文件时,文件名默认为Untitled
在jupyter下先导入pandas,再执行读取文件操作
取该文件前一百行数据
需求:统计各班级的人数
实现:
这里可以看见对该结果进行获取类型,发现是Series
想要将其转换为DataFrame需要加上命令:reset_index()
进一步改进,更改列名id为人数cnt,并将结果替换原来的clazz_num保存
以cnt的值从大到小实现排序:
读取成绩文件score.txt,设置列名
统计每个学生的总分并转换为DataFrame
更改列名称并替换:
将该成绩表与学生表相关联:
实现关联需要使用merge方法
格式:左表.merge(右表,left_on="左表关联列",right_on="右表关联列",how='关联方式')
【Day47 Pandas数据分析】left_on表示左表中用来关联的列名称
right_on表示右表中用来关联的列名称
how表示用来关联的方式,类似于sql中连表联查中的左联右联和内联,这其中的关联方式有很多种:left,right,outer,inner,cross
改进:有关学生id出现了两个,删除其中一个student_id
统计每个班的前三名,先进行分组,然后使用rank函数进行排名操作,并且设置ascending=False
使连接后的表进行倒序排列
获取前三:使用first_rank<=3的条件获取到前三名
结果:
Seaborn可视化 使用Seaborn可视化需要下载包Seaborn
... ...
写入MySQL 写入MySQL操作需要先下载包sqlalchemy
下载完之后进入到jupyter中
为虚拟机创建一个新的数据库,用于将数据写入该数据库中,这里创建一个stu数据库
写入MySQL,使用to_sql即可写入MySQL中,具体流程可以看成:
获取引擎,生成执行器,执行to_sql,具体格式如下:
结果:生成日志文件,自动创建表,再执行写入操作
进入到表中检验:进入stu数据库再进行查看
pandas读取数据库数据
使用read_sql进行读取数据库数据
pandas数据清洗 读取所要清洗的数据
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
