Pandas是一个基于python中Numpy模块的一个模块
Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些。pandas帮助填补了这⼀空⽩,使您能够在Python中执⾏整个数据分析⼯作流程,⽽不必切换到更特定于领域的语⾔,如R。与出⾊的 jupyter⼯具包和其他库相结合,Python中⽤于进⾏数据分析的环境在性能、⽣产率和协作能⼒⽅⾯都是卓越的。 pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。 pandas的主要数据结构是 Series(⼀维数据)与 DataFrame (⼆维数据),这两种数据结构⾜以处理⾦融、统计、社会科学、⼯程等领域⾥的⼤多数案例处理数据⼀般分为⼏个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想⼯具。 环境介绍 代码工具:jupyternotebook python版本:python3.8.6 系统版本:win10 一、Pands安装 打开终端指令输入pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pandas 第⼆部分 数据结构 第⼀节 Series ⽤列表⽣成 Series时,Pandas 默认⾃动⽣成整数索引,也可以指定索引l = [0,1,7,9,np.NAN,None,1024,512] # ⽆论是numpy中的NAN还是Python中的None在pandas中都以缺失数据NaN对待 s1 = pd.Series(data = l) # pandas⾃动添加索引 s2 = pd.Series(data = l,index = list('abcdefhi'),dtype='float32') # 指定⾏索引 # 传⼊字典创建,key⾏索引 s3 = pd.Series(data = {'a':99,'b':137,'c':149},name = 'Python_score') display(s1,s2,s3)第⼀节 Dataframe DataFrame是由多种类型的列构成的⼆维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。
1 import numpy as np 2 import pandas as pd 3 # index 作为⾏索引,字典中的key作为列索引,创建了3*3的DataFrame表格⼆维数组 4 df1 = pd.DataFrame(data = {'Python':[99,107,122],'Math':[111,137,88],'En': [68,108,43]},# key作为列索引 5 index = ['张三','李四','Michael']) # ⾏索引 6 df2 = pd.DataFrame(data = np.random.randint(0,151,size = (5,3)), 7 index = ['Danial','Brandon','softpo','Ella','Cindy'],# ⾏索引 8 columns=['Python','Math','En'])# 列索引 9 display(df1,df2)
第三部分 数据查看 查看DataFrame的常⽤属性和DataFrame的概览和统计信息
1 import numpy as np 2 import pandas as pd 3 df = pd.DataFrame(data = np.random.randint(0,151,size=(150,3)), 4 index = None, # 行索引默认 5 columns=['A','B','C'])#列索引 7 df.head(10)#显示前十行 !!默认是五行!! 8 df.tail(10)#显示后十行 9 df.shape#查看行数和列数 10 df.dtypes#查看数据类型 11 df.index#查看行索引 12 df.value# 对象值,二维数组 13 df.describe()#查看数据值列的汇总统计,计数,平均值,标准差,最小值,四分位数,最大值 14 df.info()#查看列索引,数据类型,非空计数和内存信息
第四部分 数据的输入输出
第一节csv
df = DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况 columns=['IT','化⼯','⽣物','教师','⼠兵']) #保存到相对路劲下文件命名为 df.to_csv('./salary.csv', sep = ';',#分割符 header = True,#是否保存列索引 index = True)#是否保存行索引、 #加载 pd.read_csv('./salary.csv', sep = ';',# 默认是逗号 header = [0],#指定列索引 index_col=0) # 指定⾏索引
#加载
pd.read_table('./salary.csv', # 和read_csv类似,读取限定分隔符的⽂本⽂件 sep = ';', header = [0],#指定列索引 index_col=1) # 指定⾏索引,IT作为⾏索引
第⼆节 Excel
pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simpleimport numpy as np import pandas as pd df1 = pd.DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况 columns=['IT','化⼯','⽣物','教师','⼠兵']) df2 = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考试成绩 columns=['Python','Tensorflow','Keras']) # 保存到当前路径下,⽂件命名是:salary.xls df1.to_excel('./salary.xls', sheet_name = 'salary',# Excel中⼯作表的名字 header = True,# 是否保存列索引 index = False) # 是否保存⾏索引,保存⾏索引 pd.read_excel('./salary.xls', sheet_name=0,# 读取哪⼀个Excel中⼯作表,默认第⼀个 header = 0,# 使⽤第⼀⾏数据作为列索引 names = list('ABCDE'),# 替换⾏索引 index_col=1)# 指定⾏索引,B作为⾏索引 # ⼀个Excel⽂件中保存多个⼯作表 with pd.ExcelWriter('./data.xlsx') as writer: df1.to_excel(writer,sheet_name='salary',index = False) df2.to_excel(writer,sheet_name='score',index = False) pd.read_excel('./data.xlsx', sheet_name='salary') # 读取Excel中指定名字的⼯作表第三节 SQL pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
import pandas as pd # SQLAlchemy是Python编程语⾔下的⼀款开源软件。提供了SQL⼯具包及对象关系映射(ORM)⼯具 from sqlalchemy import create_engine df = pd.DataFrame(data = np.random.randint(0,50,size = [150,3]),# 计算机科⽬的考试 成绩 columns=['Python','Tensorflow','Keras']) # 数据库连接 conn = create_engine('mysql+pymysql://root:12345678@localhost/pandas? charset=UTF8MB4') # 保存到数据库 df.to_sql('score',#数据库中表名 conn,# 数据库连接 if_exists='append')#如果表名存在,追加数据 # 从数据库中加载 pd.read_sql('select * from score limit 10', # sql查询语句 conn, # 数据库连接 index_col='Python') # 指定⾏索引名
---------------------------------------------!!!!!!!!!第一次更新!!!!!!!!!!!----------------------------------------------------------
第五部分 数据的选取
第一节 数据获取
!!!---先导入个数据---!!! df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),# 计算机科⽬的考试成绩 index = list('ABCDEFGHIJ'),# ⾏标签 columns=['Python','Tensorflow','Keras'])
df.Python# 查看所在列数据 df['Python']# 查看所在列数据 df[['Python','Keras']]#获取多列数据 df[1:3]#行切片操作 !!!--此处切片操作与数据的切片操作如出一辙--!!!
使用 loc[] 进行数据获取 loc通过行列标签进行索引取数操作
1 df.loc[['A','B']]#选取行标签 2 df.loc[['A','B'],['Python','Keras']]#根据行列标签选取对饮数据 3 df.loc[:,['Python','Keras']]#保留所有行 4 df.loc[::2,['Python','Keras']]#每隔2行取出一行数据 5 df.loc['A',['Python','Keras']]#根据行标签选取出对应数据 6 #此处就不截图展示了
使用 loc[] 进行数据获取 loc通过行列整数标签进行索引取数操作
df.iloc[2:4]#利用整数行切片操作与Numpy相似 !!!--此处切片操作与数据的切片操作如出一辙--!!! df.iloc[1:3,1:2]#利用整数对行和列进行切片 df.iloc[1:3:]#行切片 df.iloc[:,0:1]#列切片
Boolean索引
cond1 = df.Python > 100 # 判断Python分数是否⼤于100,返回值是boolean类型的Series df[cond1] # 返回Python分数⼤于100分的⽤户所有考试科⽬数据 cond2 = (df.Python > 50) & (df['Keras'] > 50) # &与运算 df[cond2] # 返回Python和Keras同时⼤于50分的⽤户的所有考试科⽬数据 df[df > 50]# 选择DataFrame中满⾜条件的值,如果满⾜返回值,不然返回空数据NaN df[df.index.isin(['A','C','F'])] # isin判断是否在数组中,返回也是boolean类型值
第六部分 数据集成
第⼀节 concat数据串联
#再建立两个数据矩阵 df1 = pd.DataFrame(np.random.randint(1,151,size=10), index = list('ABCDEFGHIJ'), columns=['Science']) df2 = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]), index = list('KLMNOPQRST'), columns=['Python','Tensorflow','Keras'])
pd.concat([df,df2],axis=0)#df2串联拼接到df1下方 pd.concat([df,df1],axis=1)#df1串联拼接到df的左侧 df.append(df1) # 在df1后⾯追加df2
第二节 插入
insert()插入一列
注意:如果使用insert()插入一列时,那么插入的这一列的长度必须和被插入的行数长度相等
#插入一列c++ df.insert(loc=1, column='C++', value=np.random.randint(0,151,size=(10))) df.insert(loc = 1,column='Python3.8,value=2048)
第三节 数据的链接(join SQL风格)
数据集的合并(merge)或连接(join)运算是通过⼀个或者多个键将数据链接起来的。这些运算是关系型数据库的核⼼操作。pandas的merge函数是数据集进⾏join运算的主要切⼊点。#先建立两组数据 df1 = pd.DataFrame(data = {'sex':np.random.randint(0,2,size=6),'name':['九州','九周','Nineweek','Mrs佟','小A','小C']}) df2 = pd.DataFrame(data = {'score':np.random.randint(90,151,size=6),'name':['九州','九周','Nineweek','Mrs佟','小A','小Ming']})
pd.merge(df1,df2) #(内连接) 在使用merge()合并中merge自动去除了空数据 pd.merge(df1,df2,how='left')#左链接 pd.merge(df1,df2,how='right')#右链接
Auto Copied