




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python数据分析与科学计算第8章Pandas数据分析处理8.1Pandas数据结构8.2索
引8.3数据运算8.4数据排序8.5缺失值处理8.6数据的读写(1)强大的数据处理能力:Pandas提供了丰富的数据处理和操作功能,可以快速高效地处理和转换数据。(2)支持广泛的数据格式:Pandas支持多种格式的数据输入和输出,包括CSV、Excel、JSON、SQL、HDF5等。(3)灵活的数据分组和聚合:Pandas提供了灵活的数据分组和聚合功能,可以轻松进行数据分析和汇总。(4)可视化功能
:Pandas内置了可视化功能,可以通过简单的代码实现图表和可视化结果,方便数据分析和展示。Pandas1.序列8.1Pandas数据结构
带标签的一维数据结构由一组数据及与之相关的数据索引组成两个数据类型:序列(Series),数据帧(DataFrame)
1.序列创建:pandas.Series(data=None,index=None,dtype=None,name=None,copy=False,fastpath=False)data:用于创建序列对象的数据index:索引,必须是唯一的dtype:序列中的数据类型copy:是否复制数据,默认为False8.1Pandas数据结构
8.1Pandas数据结构
【例8.1】序列的创建和使用importpandasaspddata=pd.Series(data=[85,74,98,64,82])print("序列为:\n",data)#更改索引data.index=[1,2,3,4,5]print("更改索引后的序列为:\n",data)print("序列的大小为:%d,维度为:%d,最大值:%d,最小值%d"%(data.size,data.ndim,data.max(),data.min()))序列为:085174298364482dtype:int64更改索引后的序列为:185274398464582dtype:int64序列的大小为:5,维度为:1,最大值:98,最小值648.1Pandas数据结构
【例8.1】序列的创建和使用——从字典类型创建#由字典创建序列info={"id":"1001","name":"张三"}data=pd.Series(data=info)print("由字典创建的序列为:\n",data)#字符串索引print("data[1]=",data[1])#字符串拼接print("字符串连接edu:\n",data+"edu")由字典创建的序列为:id1001name张三dtype:objectdata[1]=张三字符串连接edu:id1001eduname张三edudtype:object8.1Pandas数据结构
【例8.1】序列的创建和使用—从标量值创建importpandasaspda=pd.Series(100,index=[‘a’,‘b’,‘c’,])print("由标量值创建的序列为:\n",a)由标量值创建的序列为:
a100b100c1001.序列序列的常用属性8.1Pandas数据结构
属性说明loc使用索引值取子集iloc使用索引位置取子集dtype或dtypes序列内容的类型T序列的转置矩阵shape数据的维数size序列中元素的数量values序列的值importnumpyasnpimportpandasaspdb=pd.Series(np.arange(5),index=np.arange(10,5,-1))print("由ndarray创建的序列为:\n",b)print(b.values)由ndarray创建的序列为:10091827364dtype:int32[01234]1.序列序列的常用方法8.1Pandas数据结构
方法说明append连接两个或多个序列cov计算与另一个序列的协方差equals判断两个序列是否相等get_values获得序列的值hist绘制直方图min返回最小值max返回最大值mean返回平均值sort_values对值进行排序importnumpyasnpimportpandasaspdb=pd.Series(np.arange(5),index=np.arange(10,5,-1))c=pd.Series(np.arange(5))print(b.equals(c))False8.1Pandas数据结构
2.数据帧表格型的数据结构每一列数据类型相同不同列数据类型可以不同既有行索引,又有列索引可看做是由多个序列组成的字典可以对行和列进行算术运算创建DataFrame类对象:pandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)data:用于创建序列对象的数据index:索引,必须是唯一的dtype:序列中的数据类型copy:是否复制数据,默认为False8.1Pandas数据结构
2.数据帧数据帧的常用属性:数据帧的常用方法:8.1Pandas数据结构
2.数据帧属性说明shape获取行和列size数据的个数ndim数据集的维度indexDataFrame的索引columnsDataFrame中的列索引dtypes返回每一列元素的数据类型valuesDataFrame中的数值属性说明mean()取平均值min()取最小值max()取最大值std()取标准差count()统计非空数量describe()打印描述信息8.1Pandas数据结构
【例8.2】数据帧的创建和使用importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]])print("创建默认索引的DataFrame为:\n",data)#创建带行索引的DataFramedata=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["1","2","3"])print("\n带行索引的DataFrame为:\n",data)创建默认索引的DataFrame为:0123071917788189956575287688293带行索引的DataFrame为:01231719177882899565753876882938.1Pandas数据结构
【例8.2】数据帧的创建和使用#创建带行列索引的DataFramedata=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print(“\n带行、列索引的DataFrame为:\n”,data)#添加数据data["Python"]=[84,75,92]print("\n添加列之后的DataFrame为:\n",data)#删除列deldata["高数"]print("\n删除列之后的DataFrame为:\n",data)带行、列索引的DataFrame为:
高数
英语
物理C语言171917788289956575387688293添加列之后的DataFrame为:
高数
英语
物理C语言Python171917788842899565757538768829392删除列之后的DataFrame为:
英语
物理C语言Python191
77
88
84295
65
75
75368
82
93
92DataFrame.reindex(labels=None,index=None,columns=None,axis=None,method=None,copy=True,level=None,fill_value=nan,limit=None,tolerance=None)index:重建后的行索引。columns:重建后的列索引。method:插值填充方式。fill_value:重建索引时,缺失值的填充值。limit:前向或后向填充时的最大填充量。method:填充的方式。8.2索引
1.重建索引reindex()函数8.2索引
【例8.3】重建索引importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print("原DataFrame为:\n",data)data1=data.reindex(index=["1","2","5"])print("重建行之后的DataFrame为:\n",data1)data2=data.reindex(columns=["高数","英语","物理","Python"])print("重建列之后的DataFrame为:\n",data2)原DataFrame为:
高数
英语
物理C语言171917788289956575387688293重建行之后的DataFrame为:
高数
英语
物理C语言171.091.077.088.0289.095.065.075.05NaNNaNNaNNaN重建列之后的DataFrame为:
高数
英语
物理Python1719177NaN2899565NaN3876882NaNDataFrame.rename(mapper=None,index=None,columns=None,axis=None,copy=True,inplace=False,level=None)index:重命名的行索引。columns:重命名的列索引。axis:表示轴的名称,可以使用index或columns,也可以使用数字0或1。copy:表示是否复制底层的数据,默认为False。inplace:是否原地重命名8.2索引
2.重命名索引rename()函数8.2索引
【例8.4】重命名索引importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print("原DataFrame为:\n",data)data1=data.rename(index={"1":"a","2":"b"})print("重命名行之后的DataFrame为:\n",data1)data2=data.rename(columns={'高数':'1','物理':'2'})print("重命名列之后的DataFrame为:\n",data2)原DataFrame为:
高数
英语
物理C语言171917788289956575387688293重命名行之后的DataFrame为:
高数
英语
物理C语言a71917788b89956575387688293重命名列之后的DataFrame为:1英语2C语言1719177882899565753876882938.2索引
3.层次化索引【例8.5】创建层次化索引的DataFrameimportpandasaspd
data=[[71,91,77,88],[89,95,65,75],[87,68,82,93]]index=[["a","b","c"],["1","2","3"]]column=["高数","英语","物理","C语言"]df=pd.DataFrame(data,index=index,columns=column)print(df)高数英语物理C语言a171917788b289956575c3876882938.3数据运算
1.算术运算【例8.6】两个Series数据相加importpandasaspd
s1=pd.Series([1,2,3,4],['a','b','c','d'])s2=pd.Series([5,6,7,8],['c','d','e','a'])print(s1+s2)a9.0bNaNc8.0d10.0eNaNdtype:float648.3数据运算
1.算术运算【例8.7】两个DataFrame数据相加importpandasaspd
data1=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])data2=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["0","1","2"],columns=["高数","英语","物理","数据结构"])print(data1+data2)
C语言
数据结构
物理
英语
高数0NaNNaNNaNNaNNaN1NaNNaN142.0186.0160.02NaNNaN147.0163.0176.03NaNNaNNaNNaNNaN8.3数据运算
2.汇总和统计【例8.8】求最大值和最小值importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,87,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print("DataFrame为:\n",data)print("列最大值为:\n",data.max())print("列最小值为:\n",data.min())print("行最大值为:\n",data.max(axis=1))print("行最小值为:\n",data.min(axis=1))max()和min()函数
DataFrame为:
高数
英语
物理C语言171917788289956575387688793列最大值为:高数89英语95物理87C语言93dtype:int64列最小值为:高数71英语68物理65C语言75dtype:int64行最大值为:191295393dtype:int64行最小值为:171265368dtype:int648.3数据运算
2.汇总和统计【例8.9】计算例中每个科目的平均值、中位数和众数,以及每位学生的平均分和成绩
的中位数importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,87,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print("每个科目的平均值:\n",data.mean())print("每个科目的中位数:\n",data.median())print("每个科目的众数:\n",data.mode())print("每位同学的平均值:\n",data.mean(axis=1))print("每位同学的中位数:\n",data.median(axis=1))print("每位同学的众数:\n",data.mode(axis=1))mean()、median()、mode()函数8.3数据运算
每位同学的平均分:181.75281.00383.75dtype:float64每位同学的中位数:182.5
82.0387.0dtype:float64每位同学的众数:0
1
2
3171.077.088.0
91.0265.075.089.0
95.087.0NaNNaNNaN每个科目的平均值:高数82.333333英语84.666667物理76.333333C语言85.333333dtype:float64每个科目的中位数:高数87.0英语91.0物理77.0C语言88.0dtype:float64每个科目的众数:高数英语物理C语言0716865751879177882899587938.3数据运算
2.汇总和统计【例8.10】计算例中每个科目的标准差importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,87,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print(data.std())高数9.865766英语14.571662物理11.015141C语言9.291573dtype:float64std()函数8.3数据运算
2.汇总和统计【例8.11】计算例中每个科目的第一、第二和第三分位数importpandasaspd
data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,87,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print(data.quantile(q=[0.25,0.5,0.75]))
高数
英语
物理C语言0.2579.079.571.081.50.5087.091.077.088.00.7588.093.082.090.5quantile()函数8.3数据运算
3.唯一值和值计数【例8.12】计算不重复元素及每个元素出现的次数importpandasaspd
s=pd.Series([91,78,78,75,78,81,79,88,88,91])print("s的唯一值为:",s.unique())print("s中每个值的次数为:\n",s.value_counts())data=pd.DataFrame({"a":[91,64,78,75,78],"b":[81,79,88,88,91]})print("data['a']的唯一值为:",data["a"].unique())print("data['b']每个值的次数为:\n",data["b"].value_counts())s的唯一值为:[917875817988]s中每个值的次数为:783912882751811791dtype:int64data['a']的唯一值为:[91647875]data['b']每个值的次数为:882811791911Name:b,dtype:int64unique()函数、values_counts()函数8.4数据排序
1.按索引排序sort_index()函数sort_index(axis=0,level=None,ascending=True,inplace='False',kind='quicksort',na_position='last',sort_remaining=True)axis:排序的方向,值为0按行名进行排序,值为1按列名进行排序。level:默认为None,否则按照给定的level进行排序。ascending:是否升序排列,默认为True,表示升序,False表示降序。inplace:默认为False,表示对数据进行排序,创建新的实例。kind:选择排序的算法,默认是quicksort。na_position:缺失值存放的位置,默认为last,表示缺失值排在最后,如果设为first,则表示缺失值排在开头。8.4数据排序
【例8.13】按索引排序importpandasaspd
s=pd.Series([91,64,78,75,78],index=[5,3,1,6,5])print("原序列:\n",s)print("按索引升序排序:\n",s.sort_index())print("按索引降序排序:\n",s.sort_index(ascending=False))data=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,87,93]],index=["2","1","3"],columns=[5,2,2,7])print("原数据帧:\n",data)print("按行索引名升序排序:\n",data.sort_index())print("按列索引名降序排序:\n",data.sort_index(ascending=False,axis=1))8.4数据排序
原序列:591364178675578dtype:int64按索引升序排序:178364591578675dtype:int64按索引降序排序:675591578364178dtype:int64原数据帧:5227271917788189956575387688793按行索引名升序排序:5227189956575271917788387688793按列索引名降序排序:75222887191771758995653938768878.4数据排序
2.按值排序sort_values()函数sort_index(by,axis=0,level=None,ascending=True,inplace='False',kind='quicksort',na_position='last’)by:表示排序的列其他参数含义与按索引排序相同8.4数据排序
【例8.14】按值排序importpandasaspd
s=pd.Series([91,64,78,75,78],index=[5,3,1,6,5])#创建具有缺失值的序列print("原序列:\n",s)print("按值降序排序:\n",s.sort_values(ascending=False))data=pd.DataFrame([[71,91,77,88],[71,95,65,75],[87,68,87,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])print("原数据帧:\n",data)#对行索引为"1"的数据进行升序排序print("按行值升序排序:\n",data.sort_values(by="1",axis=1))#对列索引“高数”为主索引,“英语”为次索引进行降序排序print("按列值降序排序:\n",data.sort_values(by=["高数","英语"],ascending=False))8.4数据排序
原序列:59136417867578dtype:int64按值降序排序:591178578675364dtype:int64原数据帧:高数英语物理C语言171917788271956575387688793按行值升序排序:高数物理C语言英语171778891271657595387879368按列值降序排序:高数英语物理C语言3876887932719565751719177888.5缺失值处理
1.判断缺失值isnull()和notnull()函数【例8.15】判断缺失值importpandasaspdimportnumpyasnp
s=pd.Series(["a","b",np.nan,"c",None])#创建含有缺失值的序列print("创建的序列s:\n",s)print("s的缺失值:\n",s.isnull())#判断s的缺失值print("s中存在的缺失值和索引:\n",s[s.isnull()])#判断s中存在缺失值的列#创建含有缺失值的数据帧data=pd.DataFrame([["a","b",np.nan,"c",5],[3,None,5,5,None],[1,2,3,4,5]])print("创建的数据帧data:\n",data)print("data的缺失值:\n",data.isnull())#判断data的缺失值#判断data中存在缺失值的列print("data中存在缺失值的列:\n",data.isnull().any())#判断data中第3列的缺失值print("data中第3列的缺失值:\n",data[2].isnull())8.5缺失值处理
data的缺失值:012340FalseFalseTrueFalseFalse1FalseTrueFalseFalseTrue2FalseFalseFalseFalseFalsedata中存在缺失值的列:0False1True2True3False4Truedtype:booldata中第3列的缺失值:0True1False2FalseName:2,dtype:bool创建的序列s:0a1b2NaN3c4Nonedtype:objects的缺失值:0False1False2True3False4Truedtype:bools中存在的缺失值和索引:2NaN4Nonedtype:object创建的数据帧data:012340abNaNc5.013None5.05NaN2123.045.08.5缺失值处理
2.删除缺失值dropna()函数dropna(self,axis=0,how='any',thresh=None,subset=None,inplace=False)xis:确定删除缺失值的行或列。how:删除的方式。thresh:非空元素最低数量。subset:子集。inplace:是否原地替换。8.5缺失值处理
【例8.16】删除缺失值importpandasaspdimportnumpyasnp
s=pd.Series(["a","b",np.nan,"c",None])#创建含有缺失值的序列print("创建的序列s:\n",s)print("删除s中缺失值的数据:\n",s.dropna())#删除s的缺失值#创建含有缺失值的数据帧data=pd.DataFrame([["a","b",np.nan,"c",5],[3,None,5,5,None],[1,2,3,4,5]])print("创建的数据帧data:\n",data)print("删除data中存在缺失值的行:\n",data.dropna())print("删除data中存在缺失值的列:\n",data.dropna(axis=1))8.5缺失值处理
data的缺失值:
012340FalseFalseTrueFalseFalse1FalseFalseFalseTrueTrue2FalseFalseFalseFalseFalse删除data中存在缺失值的行:012342123.045.0删除data中存在缺失值的列:
010ab11512创建的序列s:0a1b2NaN3c4Nonedtype:object删除s中缺失值的数据:0a1b3cdtype:object创建的数据帧data:012340abNaNc5.01155.0NoneNaN2123.045.08.5缺失值处理
3.填充缺失值fillna()函数DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None)method:指定填充的方式。axis:确定删除缺失值的行或列。limit:对于前向填充和后向填充,限制填充缺失值的最大数量。inplace:是否原地填充。8.5缺失值处理
【例8.17】填充缺失值importpandasaspdimportnumpyasnp
s=pd.Series(["a","b",np.nan,"c",None])#创建含有缺失值的序列print("创建的序列s:\n",s)print("填充s中缺失值的数据:\n",s.fillna(0))#用数字0填充s的缺失值#创建含有缺失值的数据帧data=pd.DataFrame([["a","b",np.nan,"c",5],[3,None,5,5,None],[1,2,3,4,5]])print("创建的数据帧data:\n",data)print("前向填充data中的缺失值:\n",data.fillna(method='ffill'))print("后向填充data中的缺失值:\n",data.fillna(method='bfill',axis=1))8.5缺失值处理
创建的序列s:0a1b2NaN3c4Nonedtype:object填充s中缺失值的数据:0a1b203c40dtype:object创建的数据帧data:012340abNaNc5.013None5.05NaN2123.045.0前向填充data中的缺失值:
012340abNaNc5.013b5.055.02123.045.0后向填充data中的缺失值:
012340abcc5.013.05.05.05.0NaN1.02.03.04.05.08.6数据的读写
1.读写CSV文件read_csv()函数读取CSV文件
pandas.read_csv(filepath_or_buffer,sep=’,’,header=’infer’,names=None,index_col=None,usecols=None,engine=None,skiprows=None,skipfooter=0,…)8.6数据的读写
1.读写CSV文件to_csv()函数写入CSV文件
DataFrame.to_csv(path_or_buf=None,sep=’,’,na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,mode='w',encoding=None,…)8.6数据的读写
1.读写CSV文件to_csv()函数写入CSV文件importpandasaspddata=pd.DataFrame([[71,91,77,88],[89,95,65,75],[87,68,82,93]],index=["1","2","3"],columns=["高数","英语","物理","C语言"])#写入csv文件,以“*”作为分隔符,不保存行索引data.to_csv("e:/stu.csv",sep="*",columns=["高数","英语","物理","C语言"],index=0)#以“*”为分隔符读出csv文件的数据,第一行为列名data=pd.read_csv("e:/stu.csv",sep="*",header=0)print("从文件中读取的数据为:\n",data)#读取两列数据data=pd.read_csv("e:/stu.csv",sep="*",header=0,usecols=["英语","物理"])print("从文件中读取英语和物理两列数据为:\n",data)#不读取第一行数据data=pd.read_csv("e:/stu.csv",sep="*",header=0,skiprows=[0])print("不读取文件第一行的数据为:\n",data)【例8.18】将DataFrame数据写入e:\stu.csv文件,然后读出该文件中的数据并输出8.6数据的读写
1.读写CSV文件to_csv()函数写入CSV文件【例8.18】将DataFrame数据写入e:\stu.csv文件,然后读出该文件中的数据并输出从文件中读取的数据为:
高数英语物理C语言071917788189956575287688293从文件中读取英语和物理两列数据为:英语物理091771956526882不读取文件第一行的数据为:71917788089956575187688293程序执行后,在e:盘根目录下创建了stu.csv文件,以记事本打开该文件,内容如图:8.6数据的读写
2.读写Excel文件read_excel()函数来读取Excel文件
pandas.read_excel(io,sheetname=0,header=0,index_col=None,names=None,usecols=None,squeeze=None,dtype=None,skiprows=None,skipfooter=0)8.6数据的读写
2.读写Excel文件to_excel()函数写入Excel文件一般形式为:
DataFrame.to_excel(excel_writer,sheet_name='Sheet1',na_rep='',float_format=None,columns=None,header=True,index=True,index_label=None,startrow=0,startcol=0,engine=None,merge_cells=True,encoding=None,inf_rep='inf',verbose=True,freeze_panes=None,storage_options=None)8.6数据的读写
2.读写Excel文件to_excel()函数写入Excel文件【例8.19】在e:盘根目录下保存了“Python语言程序设计.xls”的Excel文件,文件内容如图所示。使用pandas提供的函数读取Sheet1工作表中的数据,读取数据时忽略前3行和后15行数据,并且只读取第1、2、5列的数据,然后写入“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东2025年度离婚协议财产分割与子女抚养及教育
- 2025年度财经主播独家经纪合同模板
- 滕州房屋网签合同5篇
- 拆旧房建新房协议书5篇
- 承租方租赁物合同5篇
- 娄底市市直医疗卫生单位招聘真题2024
- 2024年施甸县审计局招聘岗位人员考试真题
- 购买合同范文6篇
- 食品机运输合同7篇
- 2025年苯酐催化剂合作协议书
- 《康复工程学》课件-第一讲 康复工程概论
- DeepSeek:从入门到精通
- 天津2025年天津中德应用技术大学辅导员岗位招聘7人笔试历年参考题库附带答案详解
- 2025年无锡职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 2025年铜材拉丝项目可行性研究报告
- 2025四川宜宾市高县县属国企业第一次招聘3人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年北京戏曲艺术职业学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 2024 年国家公务员考试《申论》(地市级)真题及答案
- 南京2025年中国医学科学院皮肤病医院招聘13人第二批笔试历年典型考点(频考版试卷)附带答案详解
- 2025年1月浙江高考英语听力试题真题完整版(含答案+文本+MP3)
- 西门子自动化培训
评论
0/150
提交评论