版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SeriesPandas的主要数据结构是Series(一维数据)和DataFrame(二维数据),Series是带标签的一维同构数组,DataFrame是带标签的、大小可变的二维异构表格。Pandas数据结构就像是低维数据的容器。Pandas数据结构概述1.Series结构Series是带标签的一维数组,数据是有序的,可存储整数、浮点数、字符串、Python对象等类型的数据。Series结构示意图如图所示。2.Series的创建Pandas的Series类对象可以使用以下构造方法创建:pandas.Series(data=None,index=None,dtype:Dtype|None=None,name=None,copy:bool|None=None,fastpath:bool=False)->Series2.Series的创建(1)多维数组实例化Seriesdata是多维数组时,index长度必须与data长度一致。没有指定index参数时,创建数值型索引,即[0,…,len(data)-1]。Pandas的索引值可以重复。不支持重复索引值的操作会触发异常。2.Series的创建示例:使用列表实例化Series对象。代码:importpandasaspd
ser1=pd.Series(data=[1,2,3,4,5])
print('Series使用默认index:')
print(ser1)
ser2=pd.Series(data=[1,2,3,4,5],
index=['a','b','c','d','e'])
print('Series自定义index:')
print(ser2)运行结果:Series使用默认index:0112233445dtype:int64Series自定义index:a1b2c3d4e5dtype:int642.Series的创建(2)字典实例化Seriesdata为字典,且未设置index参数时,将字典中的key作为Series对象的索引、value作为Series对象的数据。data为字典,设置index参数时,按索引标签提取data里对应的值,缺失数据用NaN(NotaNumber)表示。2.Series的创建示例:使用字典实例化Series对象。代码:ser4=pd.Series(data={'b':1,'a':0,'c':2})
print('Seriesdata参数为字典:')
print(ser4)
print('Seriesdata参数为字典,自动与index匹配:')
ser5=pd.Series(data={'b':1,'a':0,'c':2},index=['b','c','d','a'])
print(ser5)运行结果:Seriesdata参数为字典:b1a0c2dtype:int64Seriesdata参数为字典,自动与index匹配:b1.0c2.0dNaNa0.0dtype:float642.Series的创建(3)标量实例化Seriesdata是标量值时,必须提供索引。Series按索引长度重复该标量值。示例:使用标量实例化Series对象。代码:ser6=pd.Series(5.,index=['a','b','c','d','e'])
print('Seriesdata参数为标量:')
print(ser6)运行结果:Seriesdata参数为标量:a5.0b5.0c5.0d5.0e5.0dtype:float643.Series的属性Series对象的常用属性,如表所示。属性说明Series.dtype或Series.dtypesSeries的基础数据的dtype对象。SSeries的名字,也对应DataFrame的列名。Series.indexSeries的索引对象。Series.valuesSeries的数据。Series.arraySeries的数据,包含长度和类型。Series.ravelSeries的展平数据对象3.Series的属性示例:输出Series的常用属性。代码:ser=pd.Series(data=[1,2,3,4,5],index=['a','b','c','d','e'])
print('Series的基础数据的dtype对象:',ser.dtype)
print('同dtype:',ser.dtypes)
print('Series的名字:',)
='ColumnName'
print('Series的名字:',)
print('Series的索引:',ser.index)
print('Series的数据:',ser.values)
print('Series的数据(包含长度和类型):\n',ser.array)
print('Series的展平数据对象:\n',ser.ravel)3.Series的属性运行结果:Series的基础数据的dtype对象:int64同dtype:int64Series的名字:NoneSeries的名字:ColumnNameSeries的索引:Index(['a','b','c','d','e'],dtype='object')Series的数据:[12345]Series的数据(包含长度和类型):
<PandasArray>[1,2,3,4,5]Length:5,dtype:int64Series的展平数据对象:
<boundmethodSeries.ravelofa1b2c3d4e5Name:ColumnName,dtype:int64>谢谢THANKYOUDataFrame1.DataFrame结构Pandas的DataFrame类对象可以使用以下构造方法创建:pandas.DataFrame(data=None,index:Axes|None=None,columns:Axes|None=None,dtype:Dtype|None=None,copy:bool|None=None,)->DataFrame2.DataFrame的创建2.DataFrame的创建(1)用Series字典生成DataFrame生成的索引是每个Series索引的并集。先把嵌套字典转换为Series。如果没有指定列,DataFrame的列就是字典键的有序列表。
2.DataFrame的创建示例:使用Series字典生成DataFrame。代码:d={'one':pd.Series([1.,2.,3.],
index=['a','b','c']),
'two':pd.Series([1.,2.,3.,4.],
index=['a','b','c','d'])}df1=pd.DataFrame(d)print('生成的DataFrame为:\n%s'%df1)df2=pd.DataFrame(d,index=['d','b','a'])print('生成的DataFrame为:\n%s'%df2)df3=pd.DataFrame(d,index=['d','b','a'],
columns=['two','three'])print('生成的DataFrame为:\n%s'%df3)运行结果:生成的DataFrame为:
onetwoa1.01.0b2.02.0c3.03.0dNaN4.0生成的DataFrame为:
onetwodNaN4.0b2.02.0a1.01.0生成的DataFrame为:
twothreed4.0NaNb2.0NaNa1.0NaN2.DataFrame的创建(2)用多维数组字典生成DataFrame多维数组的长度必须相同。如果传递了索引参数,index的长度必须与数组一致。如果没有传递索引参数,生成的结果是range(n),n为数组长度。2.DataFrame的创建示例:使用数组字典生成DataFrame。代码:d={'one':[1.,2.,3.,4.],
'two':[4.,3.,2.,1.]}
df1=pd.DataFrame(d)
print('生成的DataFrame为:\n%s'%df1)
df2=pd.DataFrame(d,index=['a','b','c','d'])
print('生成的DataFrame为:\n%s'%df2)运行结果:生成的DataFrame为:
onetwo01.04.012.03.023.02.034.01.0生成的DataFrame为:
onetwoa1.04.0b2.03.0c3.02.0d4.01.02.DataFrame的创建(3)用结构多维数组生成DataFrame本例操作与数组字典的操作方式相同。2.DataFrame的创建示例:使用结构多维数组生成DataFrame。代码:data=np.zeros((2,),dtype=[('A','i4'),('B','f4'),('C','a10')])
data[:]=[(1,2.,'Hello'),(2,3.,"World")]
print(data)
df1=pd.DataFrame(data)
print('生成的DataFrame为:\n%s'%df1)
df2=pd.DataFrame(data,index=['first','second'])
print('生成的DataFrame为:\n%s'%df2)
df3=pd.DataFrame(data,columns=['C','A','B'])
print('生成的DataFrame为:\n%s'%df3)运行结果:[(1,2.,b'Hello')(2,3.,b'World')]生成的DataFrame为:
ABC012.0b'Hello'123.0b'World'生成的DataFrame为:
ABCfirst12.0b'Hello'second23.0b'World'生成的DataFrame为:
CAB0b'Hello'12.01b'World'23.02.DataFrame的创建(4)用列表字典生成DataFrame示例:d=[{'a':1,'b':2},{'a':5,'b':10,'c':20}]df1=pd.DataFrame(d)(5)用元组字典生成DataFrame示例:df=pd.DataFrame({('a','b'):{('A','B'):1,('A','C'):2},('a','a'):{('A','C'):3,('A','B'):4},('a','c'):{('A','B'):5,('A','C'):6},('b','a'):{('A','C'):7,('A','B'):8},('b','b'):{('A','D'):9,('A','B'):10}})3.DataFrame的属性属性说明values元素index索引columns列名dtypes类型size元素个数ndim维度数shape数据形状(行列数目)示例:输出DataFrame的常用属性。代码:df=pd.DataFrame(data=[[1,2,3],[4,5,6]],
index=['a','b'],
columns=['one','two','three'])
print(df)
print('索引为:',df.index)
print('全部值为:\n%s'%df.values)
print('列名为:',df.columns)
print('数据类型为:\n%s'%df.dtypes)
##查看DataFrame的元素个数
print('元素个数为:',df.size)
print('维度数为:',df.ndim)
print('形状为:',df.shape)运行结果:onetwothreea123b456索引为:Index(['a','b'],dtype='object')全部值为:[[123][456]]列名为:Index(['one','two','three'],dtype='object')数据类型为:oneint64twoint64threeint64dtype:object元素个数为:6维度数为:2形状为:(2,3)3.DataFrame的属性谢谢THANKYOU索引对象、重置索引、重命名索引1.索引对象Pandas中的索引都是Index类对象,又称为索引对象,为了保障数据安全,该对象不可以修改。例如,创建一个Series类对象,为其指定索引,然后再修改索引,会提示错误信息“Indexdoesnotsupportmutableoperations”(索引不支持可变操作)。2.重置索引在Pandas中,通过reindex函数实现重置索引。Series.reindex(index=None,*,axis:Axis|None=None,method:ReindexMethod|None=None,copy:bool|None=None,level:Level|None=None,fill_value:Scalar|None=None,limit:int|None=None,tolerance=None)->SeriesDataFrame.reindex(labels=None,*,index=None,columns=None,axis:Axis|None=None,method:ReindexMethod|None=None,copy:bool|None=None,level:Level|None=None,fill_value:Scalar|None=np.nan,limit:int|None=None,tolerance=None)->DataFrame2.重置索引运行结果:重置SeriesIndex:c3.0d4.0e5.0fNaNdtype:float64重置DataFrameIndex:
twothreefoura2.03.0NaNb5.06.0NaNcNaNNaNNaN示例:重置Series和DataFrame对象的索引。代码:ser=pd.Series(data=[1,2,3,4,5],
index=['a','b','c','d','e'])
reindex_ser=ser.reindex(['c','d','e','f'])
print('重置SeriesIndex:\n%s'%reindex_ser)
df=pd.DataFrame(data=[[1,2,3],[4,5,6]],index=['a','b'],
columns=['one','two','three'])
reindex_df=df.reindex(index=['a','b','c'],
columns=['two','three','four'])
print('重置DataFrameIndex:\n%s'%reindex_df)2.重置索引运行结果:Series对象:a1b2dtype:int64DataFrame对象:
onetwothreea123b456比较索引:True示例:Index共享操作。代码:ser2=ser.reindex(df.index)
print('Series对象:\n%s'%ser2)
print('DataFrame对象:\n%s'%df)
print('比较索引:',ser2.indexisdf.index)3.重命名索引索引对象是无法修改的,这里的重命名索引可以是通过生成一个新的索引副本。在Pandas中,通过rename函数实现重命名索引。针对Series和DataFrame,reindex函数语法规则存差异。Series.rename(index:Renamer|Hashable|None=None,*,axis:Axis|None=None,copy:bool|None=None,inplace:bool=False,level:Level|None=None,errors:IgnoreRaise="ignore")->Series|NoneDataFrame.rename(mapper:Renamer|None=None,*,index:Renamer|None=None,columns:Renamer|None=None,axis:Axis|None=None,copy:bool|None=None,inplace:bool=False,level:Level|None=None,errors:IgnoreRaise="ignore")->DataFrame|None3.重命名索引运行结果:新旧索引指向相同基础数据:A100B2C3D4E5dtype:int64新旧索引指向不同基础数据:A1B2C3D4E5dtype:int64示例:使用rename函数重命名Series索引。代码:ser=pd.Series(data=[1,2,3,4,5],
index=['a','b','c','d','e'])ser2=ser.rename(str.upper,copy=False)ser3=ser.rename(str.upper,copy=True)ser['a']=100print('新旧索引指向相同基础数据:\n%s'%ser2)print('新旧索引指向不同基础数据:\n%s'%ser3)3.重命名索引示例:使用rename函数重置DataFrame索引。代码:df=pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],
index=['a','b','c','d'],columns=['one','two','three'])
df2=df.rename(columns={'one':'foo','two':'bar'},
index={'a':'apple','b':'banana','d':'durian'})
print('rename函数调用字典:\n%s'%df2)
df3=df.rename({'one':'foo','two':'bar'},axis='columns')
print('rename函数指定axis=columns:\n%s'%df3)
df4=df.rename({'a':'apple','b':'banana','d':'durian'},axis='index')
print('rename函数指定axis=index:\n%s'%df4)3.重命名索引运行结果:rename函数调用字典:foobarthreeapple123banana456c789durian101112rename函数指定axis=columns:foobarthreea123b456c789d101112rename函数指定axis=index:onetwothreeapple123banana456c789durian101112谢谢THANKYOUSeries的索引操作DataFrame的索引操作1.Series的索引操作(1)索引位置访问数据Series操作与ndarray类似,支持大多数NumPy函数,还支持索引切片。注意:NumPy2.2.0已不推荐使用整数下标直接访问Series数据,在将来的版本中,整数键将始终被视为标签(与DataFrame行为一致)。要按位置访问值,推荐使用Series.iloc[pos]。1.Series的索引操作运行结果:取出某个数据:1切片操作:a1b2c3dtype:int64取出非连续数据:a1c3e5dtype:int64获取中位数:3.0获取大于中位数的数据:d4e5dtype:int64示例:使用索引位置获取数据。代码:ser=pd.Series(data=[1,2,3,4,5],
index=['a','b','c','d','e'])
print('取出某个数据:',ser[0])
print('切片操作:\n%s'%ser[:3])
print('取出非连续数据:\n%s'%ser[[0,2,4]])
print('获取中位数:',ser.median())
print('获取大于中位数的数据:',ser[ser>ser.median()])1.Series的索引操作(2)索引名称访问数据Series类似固定大小的字典,可以用索引标签提取值或设置值。1.Series的索引操作运行结果:取出某个数据:1取出非连续数据:a1c3e5dtype:int64切片操作:a1b2c3dtype:int64判断标签是否存在:True使用属性取出标签值:3使用方法取出标签值:nan示例:使用索引名称获取数据。代码:print('取出某个数据:',ser['a'])
print('取出非连续数据:\n%s'%ser[['a','c','e']])
print('切片操作:\n%s'%ser[:'c'])
print('判断标签是否存在:','c'inser)
print('使用属性取出标签值:',ser.c)
print('使用方法取出标签值:',ser.get('f',np.nan))1.Series的索引操作(3)Series.loc[]Series.loc[]针对Series对象的索引名称(不支持索引位置)或布尔数组进行切片的方法,范围包括start和end。1.Series的索引操作运行结果:单一标签:1标签列表:a1c3e5dtype:int64标签切片:a1b2c3dtype:int64布尔数组:a1c3e5dtype:int64示例:使用Series.loc[]获取数据。代码:print('单一标签:',ser.loc['a'])
print('标签列表:\n%s'%ser.loc[['a','c','e']])
print('标签切片:\n%s'%ser.loc[:'c'])
print('布尔数组:\n%s'%ser.loc[[True,False,True,False,True]])1.Series的索引操作(4)Series.iloc[]Series.iloc[]针对Series对象的索引位置(不支持索引标签)或布尔数组进行切片的方法,范围包括start,不包括end。1.Series的索引操作运行结果:单一标签:1标签列表:a1c3e5dtype:int64标签切片:a1b2c3dtype:int64布尔数组:a1c3e5dtype:int64示例:使用iloc函数访问Series数据。代码:print('单一标签:',ser.iloc[0])
print('标签列表:\n%s'%ser.iloc[[0,2,4]])
print('标签切片:\n%s'%ser.iloc[:3])
print('布尔数组:\n%s'%ser.iloc[[True,False,True,False,True]])2.DataFrame的索引操作1)使用column和index访问数据(1)单列:DataFrame.column_name或DataFrame[column_name],返回Series对象。(2)多列:DataFrame[[column_name1,column_name2,…]],返回DataFrame对象。(3)多行:DataFrame[start:stop]或DataFrame[start:stop:step],返回DataFrame对象。注意:①这里不支持单个数字的使用,如果需要访问某一行,可以使用DataFrame[Number:Number+1]。②start、stop可以使用index的索引位置、索引名称,但是不能混用。(4)多行多列:DataFrame[[column_name1,column_name2,…]][start:stop],返回DataFrame对象。选择所有列可使用DataFrame[:][start:stop]。2.DataFrame的索引操作示例:使用column和index访问行和列。代码:df=pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],
index=['a','b','c','d'],
columns=['one','two','three'])
print('(1)单列访问')
print('字典形式访问:\n%s'%df['two'])
print('属性形式访问:\n%s'%df.two)
print('(2)多列访问')
print(df[['one','three']])
print('(3)多行访问')
print('索引位置访问:\n%s'%df[0:2:1])
print('索引名称访问:\n%s'%df['a':'c':1])
print('(4)多行多列访问')
print(df[['one','three']][0:2])2.DataFrame的索引操作2)DataFrame.loc[]loc函数是针对DataFrame索引名称的切片方法,如果传入的不是索引名称,那么切片操作将无法执行。利用loc函数,能够实现所有单层索引切片操作。loc函数语法规则如下。DataFrame.loc[行索引名称或条件,列索引名称](1)单列切片。DataFrame.loc[:,column_name],返回Series对象。(2)多列切片。DataFrame.loc[:,[column_name1,column_name2,…]],返回DataFrame对象。(3)花式切片。使用loc函数取出DataFrame中的任意数据,在loc使用的时候内部传入的行索引名称如果为一个区间,则前后均为闭区间。DataFrame.loc[start:stop:step,[column_name1,column_name2,…]],返回DataFrame对象。(4)条件切片。loc内部还可以传入表达式,结果会返回满足表达式的所有值。(5)可传入布尔数组完成行、列的切片操作。DataFrame.loc[布尔数组,布尔数组]2.DataFrame的索引操作示例:使用loc函数访问DataFrame对象中的数据。代码:print('(1)单列所有')
print(df.loc[:,'two'])
print('(2)多列切片')
print(df.loc[:,['one','three']])
print('(3)花式切片')
print(df.loc['a':'c':1,['one','three']])
print('(4)条件切片')
print(df.loc[df['two']>5,['one','three']])
print('(5)布尔数组切片')
print(df.loc[[True,True,False,True],
[True,False,True]])运行结果:(1)单列所有a2b5c8d11Name:two,dtype:int64(2)多列切片
onethreea13b46c79d1012(3)花式切片
onethreea13b46c79(4)条件切片
onethreec79d1012(5)布尔数组切片
onethreea13b46d10122.DataFrame的索引操作3)DataFrame.iloc[]iloc函数和loc函数区别是,iloc函数接收的必须是行索引和列索引的位置。iloc函数语法规则如下。DataFrame.iloc[行索引位置,列索引位置](1)单列切片。DataFrame.iloc[:,column_num],返回Series对象。(2)多列切片。DataFrame.iloc[:,[column_num1,column_num2,…]],返回DataFrame对象。(3)花式切片。iloc方法使用时,内部传入的行索引位置或列索引位置为区间时,为前闭后开区间。DataFrame.iloc[start:stop:step,[column_num1,column_num2,…]],返回DataFrame对象。(4)条件切片。iloc方法不能接收表达式,这是由于此处条件返回的为一个布尔值Series,应取出Series的values再使用表达式。(5)可传入布尔数组完成行、列的切片操作。DataFrame.iloc[布尔数组,布尔数组]2.DataFrame的索引操作示例:使用iloc函数访问DataFrame对象中的数据。代码:print('(1)单列所有')
print(df.iloc[:,1])
print('(2)多列切片')
print(df.iloc[:,[0,2]])
print('(3)花式切片')
print(df.iloc[0:2:1,[0,2]])
print('(4)条件切片')
print(df.iloc[(df['two']>5).values,[0,2]])
print('(5)布尔数组切片')
print(df.iloc[[True,True,False,True],
[True,False,True]])运行结果:(1)单列所有a2b5c8d11Name:two,dtype:int64(2)多列切片
onethreea13b46c79d1012(3)花式切片
onethreea13b46(4)条件切片
onethreec79d1012(5)布尔数组切片
onethreea13b46d1012谢谢THANKYOU数据变更1.Series数据变更2.DataFrame数据变更1.Series数据变更(1)修改更改Series中的数据,原理是将这部分数据提取出来,重新赋值为新的数据。需要注意的是,数据更改如果直接针对Series原数据更改,操作无法撤销,如果做出更改,需要对更改条件做确认或对数据进行备份。1.Series数据变更①索引修改。运行结果:修改数值后的Series:a-1b2c-1d4e-1dtype:int64修改数据类型后的Series:a-1.0b2.0c-1.0d4.0e-1.0dtype:float64示例:使用索引修改Series对象中的数据。代码:ser=pd.Series(data=[1,2,3,4,5],
index=['a','b','c','d','e'])
ser[[0,2,4]]=-1
print('修改数值后的Series:\n%s'%ser)
ser=ser.astype(np.float64)
print('修改数据类型后的Series:\n%s'%ser)1.Series数据变更②update函数update函数使用传递的Series对象中的非NA值在适当位置修改Series。该函数按索引对齐。语法规则如下所示:Series.update(other:Series|Sequence|Mapping)other为Series对象或可以强制转换为Series的对象,可以按照数据的顺序更新,也可以按照index标签进行更新。update函数无返回值,直接修改原始数据。1.Series数据变更运行结果:根据Series对象的顺序修改:041526dtype:int64根据列表的顺序修改:041226dtype:int64根据索引修改:0d1b2edtype:object示例:使用update函数修改Series对象中的数据。代码:ser1=pd.Series([1,2,3])ser1.update(pd.Series([4,5,6]))print('根据Series对象的顺序修改:\n%s'%ser1)ser2=pd.Series([1,2,3])ser2.update([4,np.nan,6])print('根据列表的顺序修改(np.nan忽略):\n%s'%ser3)ser3=pd.Series(['a','b','c'])ser3.update(pd.Series(['d','e'],index=[0,2]))print('根据索引修改:\n%s'%ser4)1.Series数据变更(2)添加①Series['new_index']=value。直接在原来的Series上进行修改,并且每次只能够添加一个Series值。②Series.loc['new_index']=value。直接在原来的Series上进行修改,并且每次只能够添加一个Series值。③Series._append(to_append,ignore_index:bool=False,verify_integrity:bool=False)。将to_append对应的Series、列表或元组添加到Series对象末尾,默认不忽略添加对象的index、不进行验证完整性。返回一个新的Series对象。1.Series数据变更运行结果:011223a4b5c6dtype:int64011223F8dtype:int64011223F8H10dtype:int64示例:向Series对象中添加数据。代码:ser1=pd.Series([1,2,3])
ser2=ser1._append(pd.Series(data=[4,5,6],
index=['a','b','c']))
print(ser2)
ser1['F']=8
print(ser1)
ser1.loc['H']=10
print(ser1)1.Series数据变更(3)删除①使用del关键词删除Series对象指定数据,删除操作作用到原始数据。②Series.drop(labels:IndexLabel|None=None,*,axis:Axis=0,index:IndexLabel|None=None,columns:IndexLabel|None=None,level:Level|None=None,inplace:bool=False,errors:IgnoreRaise="raise")->Series|None,返回一个新的Series对象,删除结果不作用到原始数据,常用于根据index删除Series对象的指定数据。1.Series数据变更运行结果:b2c3d4e5dtype:int64b2c3d4e5dtype:int64b2c3dtype:int64示例:从Series对象中删除数据。代码:ser1=pd.Series(data=[1,2,3,4,5],
index=['a','b','c','d','e'])
delser1['a']
print(ser1)
ser2=ser1.drop(index=['d','e'])
print(ser1)
print(ser2)2.DataFrame数据变更(1)修改更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据。需要注意的是,数据更改直接针对DataFrame原数据更改,操作无法撤销,如果做出更改,需要对更改条件做确认或对数据进行备份。常使用DataFrame.loc[]或DataFrame.iloc[]提取数据并修改,可以将提取的数据修改为某个值,也可以按照提取的数据位置进行修改。2.DataFrame数据变更(2)添加——添加列①新建索引添加列DataFrame添加一列只需要新建一个列索引。并对该索引下的数据进行赋值操作即可。新增的一列值是相同的则直接赋值一个常量即可。DataFrame[new_column]=valueDataFrame[new_column]=NewSeries2.DataFrame数据变更(2)添加——添加列②insert函数insert函数用来在指定的column位置插入新的列,语法规则如下:
DataFrame.insert(loc:int,column:Hashable,value:Scalar|AnyArrayLike,allow_duplicates:bool|lib.NoDefault=lib.no_default)->None2.DataFrame数据变更运行结果:新建索引添加列:
onetwothreenewa1230.333333b4560.666667c7890.777778d1011120.833333insert函数添加列:
idonetwothreenewa11230.333333b14560.666667c17890.777778d11011120.833333示例:使用insert函数向DataFrame插入列。代码:df=pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],
index=['a','b','c','d'],
columns=['one','two','three'])
df['new']=df['one']/df['three']
print('新建索引添加列:\n%s'%df)
df.insert(loc=0,column='id',value=1)
print('insert函数添加列:\n%s'%df)2.DataFrame数据变更(2)添加——添加行DataFrame._append(other,ignore_index:bool=False,verify_integrity:bool=False,sort:bool=False)->DataFrame将other对应的DataFrame对象添加到最后一行后面,默认不忽略添加对象的index、不进行验证完整性、不排序。返回一个新的DataFrame对象,原始数据不发生变化。2.DataFrame数据变更(3)删除删除某列或某行数据需要用到Pandas提供的drop函数,drop函数的用法如下:DataFrame.drop(labels:IndexLabel=None,*,axis:Axis=0,index:IndexLabel=None,columns:IndexLabel=None,level:Level=None,inplace:bool=False,errors:IgnoreRaise="raise")->DataFrame|None2.DataFrame数据变更运行结果:删除列two后的数据为:
onethreea13b46c79d1012删除a、c行后的数据为:
onethreeb46d1012示例:使用drop函数删除DataFrame行或列。代码:df=pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],
index=['a','b','c','d'],
columns=['one','two','three'])df.drop(labels='two',axis=1,inplace=True)print('删除列two后的数据为:\n%s'%df)df.drop(labels=['a','c'],axis=0,inplace=True)print('删除a、c行后的数据为:\n%s'%df)谢谢THANKYOU数据运算1.算术运算与对齐2.函数应用与映射3.排序4.统计计算与描述1.算术运算与对齐Pandas执行算术运算时,会先按照索引进行对齐,对齐以后再进行相应的运算,没有对齐的位置会用NaN进行补齐。其中,Series是按行索引进行对齐,DataFrame是按行索引、列索引对齐。常用的算术运算包括:加(+)、减(-)、乘(*)、除(/)、幂(**)。1.算术运算与对齐运行结果:Series的算术运算与对齐:01.000000e+2017.400250e+2125.520614e+233NaN4NaNdtype:float64DataFrame的算术运算与对齐:abeA0.02.0NaNCNaNNaNNaNDNaNNaNNaN示例:Series、DataFrame的算术运算与对齐。代码:print('Series的算术运算与对齐:')ser1=pd.Series(range(10,13),index=range(3))ser2=pd.Series(range(20,25),index=range(5))print(ser1**ser2)print('DataFrame的算术运算与对齐:')data1=np.arange(6).reshape(2,3)data2=np.arange(4).reshape(2,2)df1=pd.DataFrame(data1,columns=['a','b','e'],index=['A','C'])
df2=pd.DataFrame(data2,columns=['a','b'],index=['A','D'])
print(df1+df2)2.函数应用与映射(1)map函数。将函数套用到Series的每个元素中。Series.map(arg:Callable|Mapping|Series,na_action:Literal["ignore"]|None=None)->Series默认将NaN传递给arg对应的函数,返回修改后的Series的对象,修改结果作用到原始数据。2.函数应用与映射运行结果:onetwothreea123个b456个c789个d101112个
onetwothreea123b456c789d101112示例:将“three”列的单位去掉,并转换为整型。代码:df=pd.DataFrame(data=[[1,2,'3个'],[4,5,'6个'],
[7,8,'9个'],[10,11,'12个']],
index=['a','b','c','d'],
columns=['one','two','three'])
print(df)
deff(x):
returnint(x.split('个')[0])
df['three']=df['three'].map(f)
print(df)2.函数应用与映射(2)apply函数。将函数套用到DataFrame的行与列上,行与列通过axis参数设置。DataFrame.apply(func:AggFuncType,axis:Axis=0,raw:bool=False,result_type:Literal["expand","reduce","broadcast"]|None=None,args=(),by_row:Literal[False,"compat"]="compat",engine:Literal["python","numba"]="python",engine_kwargs:dict[str,bool]|None=None,**kwargs)2.函数应用与映射运行结果:one5.5two6.5three7.5dtype:float64a2.0b5.0c8.0d11.0dtype:float64示例:使用apply函数对DataFrame对象中的数据进行映射。代码:df=pd.DataFrame(data=[[1,2,3],[4,5,6],
[7,8,9],[10,11,12]],
index=['a','b','c','d'],
columns=['one','two','three'])
df1=df.apply(func=np.mean,axis=0)
print(df1)
df2=df.apply(func=np.mean,axis=1)
print(df2)2.函数应用与映射(3)applymap函数。
DataFrame.applymap(func:PythonFuncType,na_action:NaAction|None=None,**kwargs)->DataFrame将函数套用到DataFrame的每个元素上,返回DataFrame对象,原始数据不发生变化。注意:从NumPy2.1.0开始,DataFrame.applymap函数已被弃用,可以使用DataFrame.map函数代替,使用方法一致。3.排序由于Pandas中存放的是索引和数据的组合,因此既可以按索引进行排序,也可以按数据进行排序。(1)按索引排序
Series或DataFrame.sort_index(axis:Axis=0,level:IndexLabel|None=None,ascending:bool|Sequence[bool]=True,inplace:bool=False,kind:SortKind="quicksort",na_position:NaPosition="last",sort_remaining:bool=True,ignore_index:bool=False,key:IndexKeyFunc|None=None)3.排序(2)按值排序Series.sort_values(*,axis:Axis=0,ascending:bool|Sequence[bool]=True,inplace:bool=False,kind:SortKind="quicksort",na_position:NaPosition="last",ignore_index:bool=False,key:ValueKeyFunc|None=Non)->Series|None
DataFrame.sort_values(by:IndexLabel,*,axis:Axis=0,ascending:bool|list[bool]|tuple[bool,...]=True,inplace:bool=False,kind:SortKind="quicksort",na_position:str="last",ignore_index:bool=False,key:ValueKeyFunc|None=None)->DataFrame|Nonesort_values函数的参数使用与sort_index函数基本一致。不同点是,针对DataFrame对象,可使用参数“by:IndexLabel”指定排序的列。3.排序运行结果:Series对象按照data排序:51.042.015.036.02NaNdtype:float64DataFrame对象按照列two排序:
onetwothreed10012a123c749b456示例:使用sort_values函数对值排序。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国物流行业细分市场机会及利基战略与竞争优势培育报告
- 2026中国汽车电子芯片功能安全认证流程与时间成本优化研究
- 2026中国智能手机市场销售增长及品牌竞争态势研究分析报告
- 2026中国无人机货运平台动力系统适航审定难点报告
- 2026中国通信基站建设行业市场供需格局及строительные投资规划研究
- 2026热电材料生产技术革新与市场需求发展策略研究报告
- 2026中国新能源行业数字化转型投资机会与挑战分析报告
- 2026中国智能电网设备行业市场供需分析及投资风险评估规划报告
- 2026中国溴素资源开发利用与阻燃剂市场前景报告
- 2026中国医疗AI辅助诊断系统审批流程与医院采购标准分析报告
- 内蒙古赤峰市2025-2026学年高一下学期7月期末考试数学试卷
- 2026中国压力传感器技术创新与下游应用领域拓展报告
- 中邮金融资产投资有限公司招聘笔试题库2026
- 美国糖尿病学会“2026年妊娠期高血糖诊治指南”解读
- 自然灾害中的急救护理
- 2026年全国I卷高考语文真题解读暨2027届高三高考备考复习策略
- 肩关节不稳康复治疗方法
- 2026-2030中国拍立得行业营销格局及未来前景趋势分析研究报告
- 中国对外文化集团公司招聘笔试题库2026
- 2026年国家电网招聘考试(计算机类)试题及答案
- 船厂质量管理奖惩制度
评论
0/150
提交评论