PythonPandas的使⽤!!!!!详解
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 pypi.doubanio/simple/ --trusted-host pypi.doubanio 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 对象构成的字典。
import numpy as np
import pandas as pd
# index 作为⾏索引,字典中的key作为列索引,创建了3*3的DataFrame表格⼆维数组
df1 = pd.DataFrame(data = {'Python':[99,107,122],'Math':[111,137,88],'En': [68,108,43]},# key作为列索引
index = ['张三','李四','Michael']) # ⾏索引
df2 = pd.DataFrame(data = np.random.randint(0,151,size = (5,3)),
index = ['Danial','Brandon','softpo','Ella','Cindy'],# ⾏索引
columns=['Python','Math','En'])# 列索引
display(df1,df2)
第三部分数据查看
查看DataFrame的常⽤属性和DataFrame的概览和统计信息
import numpy as np
import pandas as pd
df = pd.DataFrame(data = np.random.randint(0,151,size=(150,3)),
index = None, # ⾏索引默认
columns=['A','B','C'])#列索引
df.head(10)#显⽰前⼗⾏!!默认是五⾏!!
df.tail(10)#显⽰后⼗⾏
df.shape#查看⾏数和列数
df.dtypes#查看数据类型
df.index#查看⾏索引
df.value# 对象值,⼆维数组
df.describe()#查看数据值列的汇总统计,计数,平均值,标准差,最⼩值,四分位数,最⼤值
df.info()#查看列索引,数据类型,⾮空计数和内存信息
merge函数
第四部分数据的输⼊输出
第⼀节csv
df = DataFrame(data = np.random.randint(0,50,size = [50,5]), # 薪资情况
columns=['IT','化⼯','⽣物','教师','⼠兵'])
#保存到相对路劲下⽂件命名为
<_csv('./salary.csv',
sep = ';',#分割符
header = True,#是否保存列索引
index = True)#是否保存⾏索引、
#加载
sep = ';',# 默认是逗号
header = [0],#指定列索引
index_col=0) # 指定⾏索引
#加载
pip install xlrd -i pypi.tuna.tsinghua.edu/simple
pip install xlwt -i pypi.tuna.tsinghua.edu/simple
import 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
<_excel('./salary.xls',
sheet_name = 'salary',# Excel中⼯作表的名字
header = True,# 是否保存列索引
index = False) # 是否保存⾏索引,保存⾏索引
sheet_name=0,# 读取哪⼀个Excel中⼯作表,默认第⼀个
header = 0,# 使⽤第⼀⾏数据作为列索引
names = list('ABCDE'),# 替换⾏索引
index_col=1)# 指定⾏索引,B作为⾏索引
# ⼀个Excel⽂件中保存多个⼯作表
with pd.ExcelWriter('./data.xlsx') as writer:
<_excel(writer,sheet_name='salary',index = False)
<_excel(writer,sheet_name='score',index = False)
sheet_name='salary') # 读取Excel中指定名字的⼯作表
第三节 SQL
pip install sqlalchemy -i pypi.tuna.tsinghua.edu/simple
pip install pymysql -i pypi.tuna.tsinghua.edu/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')
# 保存到数据库
<_sql('score',#数据库中表名
conn,# 数据库连接
if_exists='append')#如果表名存在,追加数据
# 从数据库中加载
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通过⾏列标签进⾏索引取数操作
df.loc[['A','B']]#选取⾏标签
df.loc[['A','B'],['Python','Keras']]#根据⾏列标签选取对饮数据
df.loc[:,['Python','Keras']]#保留所有⾏
df.loc[::2,['Python','Keras']]#每隔2⾏取出⼀⾏数据
df.loc['A',['Python','Keras']]#根据⾏标签选取出对应数据
#此处就不截图展⽰了
使⽤ iloc[] 进⾏数据获取 iloc通过⾏列整数标签进⾏索引取数操作
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'])
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']})
<(df1,df2)
#(内连接)在使⽤merge()合并中merge⾃动去除了空数据
<(df1,df2,how='left')#左链接
<(df1,df2,how='right')#右链接
---------------------------------------------!!!!!!!!!第⼆次更新!!!!!!!!!!!----------------------------------------------------------第七部分数据清洗
第⼀节 duplicated筛选重复数据
duplicated是以⾃上向下的顺序进⾏筛选如果⾏值相同就返回TRUE。
#创建⼀个分值数据
df2 = pd.DataFrame(data={'Name':['九州','Mrs佟','Nineweek',None,np.NAN,'Mrs佟'],'Sex':[0,1,0,1,0,1],'Score':[89,100,67,90,98,100]})
df2.duplicated()#检查重复值以Boolean形式进⾏输出展⽰
df2.duplicated().sum()#打印有多少重复值
df2[df2.duplicated()]#打印重复值
df2[df2.duplicated()==False]#打印⾮重复值
df2.drop_duplicates()#删除重复值(此操作并不是在数据源本⾝进⾏删除操作)
df2.drop_duplicates(inplace=True)#删除重复值(此操作是在数据源本⾝进⾏删除操作)
第⼆节过滤空数据
df2.isnull()#检查是否存在空值(可以查到NAN值和None值)
df2.dropna(how = 'any') # 删除空数据(此操作并不是在数据源本⾝进⾏删除操作)
df2.dropna(how = 'any',inplace=True)# 删除空数据(此操作是在数据源本⾝进⾏删除操作)
df2.fillna(value='⼩A')#填充空数据(此操作并不是在数据源本⾝进⾏删除操作)
df2.fillna(value='⼩A',inplace=True)#填充空数据(此操作是在数据源本⾝进⾏删除操作)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论