西安网站建设,德阳seo优化,网络营销推广方案公司,全渠道营销pandas——DataFrame基本操作#xff08;二#xff09; 文章目录pandas——DataFrame基本操作#xff08;二#xff09;一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.修改数据2.缺失值3.合并1.concat合并2.使用append方法合并3.使用merge进行合并4.使用…pandas——DataFrame基本操作二 文章目录pandas——DataFrame基本操作二一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.修改数据2.缺失值3.合并1.concat合并2.使用append方法合并3.使用merge进行合并4.使用join进行连接一、实验目的
熟练掌握pandas中DataFrame的修改元素值、缺失值处理、合并操作的方法
二、实验原理
concat合并
pd.concat(objs, axis0, joinouter, join_axesNone, ignore_indexFalse,keysNone, levelsNone, namesNone, verify_integrityFalse)objs: seriesdataframe或者是panel构成的序列lsit。
axis 需要合并链接的轴0是行1是列默认为axis0。
join连接的方式 inner或者outer默认为join‘outer’
keys合并的同时增加分区。
ignore_index忽略索引默认为False当为True时合并的两表就按列字段对齐。
merge合并 pandas的merge方法提供了一种类似于SQL的内存链接操作官网文档提到它的性能会比其他开源语言的数据操作例如R要高效。
pd.merge(left, right, howinner, onNone, left_onNone, right_onNone,left_indexFalse, right_indexFalse, sortTrue,suffixes(_x, _y), copyTrue, indicatorFalse,validateNone)merge的参数
left/right两个不同的DataFrame
on指的是用于连接的列索引名称。必须存在左右两个DataFrame对象中如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键
left_on左则DataFrame中用作连接键的列名;这个参数中左右列名不相同但代表的含义相同时非常有用。right_on右则DataFrame中用作 连接键的列名。
left_index使用左则DataFrame中的行索引做为连接键。
right_index使用右则DataFrame中的行索引做为连接键。
how指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner。
sort根据DataFrame合并的keys按字典顺序排序默认是True如果置false可以提高表现。
suffixes字符串值组成的元组用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称默认为(‘_x’,‘_y’)
copy默认为True,总是将数据复制到数据结构中大多数情况下设置为False可以提高性能
indicator在 0.17.0中还增加了一个显示合并数据中来源情况如只来自于左边(left_only)、两者(both)。
merge的默认合并方法merge用于表内部基于 index-on-index 和 index-on-column(s) 的合并但默认是基于index来合并。
join连接 主要用于索引上的合并
join(self, other, onNone, howleft, lsuffix, rsuffix,sortFalse)其中参数的意义与merge方法基本相同,只是join方法默认为左外连接howleft
1.默认按索引合并可以合并相同或相似的索引不管他们有没有重叠列。
2.可以连接多个DataFrame
3.可以连接除索引外的其他列
4.连接方式用参数how控制
5.通过lsuffix‘’, rsuffix‘’ 区分相同列名的列
三、实验环境
Python 3.6.1以上
jupyter notebook
四、实验内容
练习pandas中DataFrame的修改元素值、缺失值处理、合并操作。
五、实验步骤
1.修改数据
1.通过字典对象创建一个DataFrame。
import numpy as np
import pandas as pd
dates pd.date_range(20130101, periods6)
df pd.DataFrame(np.random.randn(6,4), indexdates, columnslist(ABCD))
print(df)2.新建一个值为[1,2,3,4,5,6]索引index为2013-01-02到2013-01-07的Series并将series赋值给df作为df新增的F列。
s1pd.Series([1,2,3,4,5,6],indexpd.date_range(20130102,periods6))
print(s1)
df[F]s1
print(df)3.使用loc方法把df的D列值修改为5*len(df)。
df.loc[:,D]np.array([5]*len(df))
print(df)4.使用copy方法将df赋值给df2,使用where语句将df2中满足df20条件的值修改为-df2。
df2df.copy()
df2[df20]-df2
print(df2)2.缺失值
1.使用reindex方法将df的行列索引同时重新索引使行indexdate[0:4]列索引culumnslist(df.columns[‘E’])并返回一个新的数据帧df1然后使用loc方法将df1中行索引为dates[0]和dates[1]列为“E的值修改为1。
df1df.reindex(indexdates[0:4],columnslist(df.columns)[E])
print(df1)
df1.loc[dates[0]:dates[1],E]1
print(df1)2.使用dropna方法删除df1中任何包含缺失值的行。
df1.dropna(howany)3.使用fillna方法将df1中所有的缺失值用5填充。
print(df1)
df1.fillna(value5)4.使用isnull方法判断df1中的值是否为缺失值是缺失值返回True否则返回False返回一个由布尔值组成的数据帧。
pd.isnull(df1) 5.使用notnull判断df1中的值是否为缺失值返回一个由布尔值组成的数据帧。
pd.notnull(df1)3.合并
1.concat合并
1.创建数据帧df1、df2、df3使用concat函数将df1\df2\df3进行合并。
df1 pd.DataFrame({A: [A0, A1, A2, A3], B: [B0, B1, B2, B3],C: [C0, C1, C2, C3],D: [D0, D1, D2, D3]},index[0, 1, 2, 3])
df2 pd.DataFrame({A: [A4, A5, A6, A7],B: [B4, B5, B6, B7],C: [C4, C5, C6, C7],D: [D4, D5, D6, D7]},index[4, 5, 6, 7])
df3 pd.DataFrame({A: [A8, A9, A10, A11],B: [B8, B9, B10, B11],C: [C8, C9, C10, C11],D: [D8, D9, D10, D11]},index[8, 9, 10, 11])
result pd.concat([df1,df2,df3])
print(df1:\n,df1,\ndf2:\n,df2,\ndf3:\n,\nresult:\n,result)2.将df1,df2,df3进行合并并将合并后的数据帧进行分区为keys[‘x’,‘y’,‘z’]。
result1 pd.concat([df1,df2,df3], keys[x, y, z])
print(result1)3.新建一个数据帧df4将df1与df4进行列项合并axis1。
df4 pd.DataFrame({B: [B2, B3, B6, B7],D: [D2, D3, D6, D7],F: [F2, F3, F6, F7]},index[2, 3, 6, 7])
result2pd.concat([df1,df4],axis1)
print(result2)4.df1与df4进行列项合并axis1合并方式为内部合并join‘inner’。
result3pd.concat([df1,df4],axis1,joininner)
print(result3)2.使用append方法合并
1.使用append方法将df1与df2合并。
df1.append(df2)2.使用append方法将df1与df4合并。
df1.append(df4)3…使用append方法将df1与df2、df3合并。
df1.append([df2,df3])3.使用merge进行合并
1.创建两个数据帧left、right使用merge函数按key列将left与right进行连接。
left pd.DataFrame({key: [K0, K1, K2, K3],A: [A0, A1, A2, A3], B: [B0, B1, B2, B3]})
right pd.DataFrame({key: [K0, K1, K2, K3],C: [C0, C1, C2, C3], D: [D0, D1, D2, D3]})
result pd.merge(left, right, onkey)
print( left,right,result)2.复合key的合并方法使用merge的时候可以选择多个key作为复合可以来对齐合并。
创建两个数据帧left、right使用merge函数按[key1key2]列将left与right进行连接。
left pd.DataFrame({key1: [K0, K0, K1, K2], key2: [K0, K1, K0, K1],A: [A0, A1, A2, A3],B: [B0, B1, B2, B3]})
right pd.DataFrame({key1: [K0, K1, K1, K2],key2: [K0, K0, K0, K0],C: [C0, C1, C2, C3],D: [D0, D1, D2, D3]})
result pd.merge(left, right, on[key1, key2])
print( left,right,result)3.使用merge函数按[key1key2]列将left与right进行左表连接。
left pd.DataFrame({key1: [K0, K0, K1, K2], key2: [K0, K1, K0, K1],A: [A0, A1, A2, A3],B: [B0, B1, B2, B3]})
right pd.DataFrame({key1: [K0, K1, K1, K2],key2: [K0, K0, K0, K0],C: [C0, C1, C2, C3],D: [D0, D1, D2, D3]})
result pd.merge(left, right, howleft, on[key1, key2])
print( left,right,result)4.使用merge函数按[key1key2]列将left与right进行右表连接。
result pd.merge(left, right, howright, on[key1, key2])
print(result)5.使用merge函数按[key1key2]列将left与right进行外表连接。
result pd.merge(left, right, howouter, on[key1, key2])
print(result)6.使用merge函数按key1key2列将left与right进行内表连接。
result pd.merge(left, right, howinner, on[key1, key2])
print(result)7.创建两个都只有A、B两列的数据帧left,right使用merge函数按B列将left与right进行外表连接可以看到除连接列B以外的列名相同时会在列名后加上区分的后缀。
left pd.DataFrame({A : [1,2], B : [2, 2]})
right pd.DataFrame({A : [4,5,6], B: [2,2,2]})
result pd.merge(left, right, onB, howouter)
print(result)8.创建两个数据帧df1、df2使用merge函数按col1列将df1与df2进行外表连接并使用参数indicator显示出每列值在合并列中是否出现。
df1 pd.DataFrame({col1: [0, 1], col_left:[a, b]})
df2 pd.DataFrame({col1: [1, 2, 2],col_right:[2, 2, 2]})
pd.merge(df1, df2, oncol1, howouter, indicatorTrue)4.使用join进行连接
1.创建两个数据帧left、right使用join方法将left与right连接。
left pd.DataFrame({A: [A0, A1, A2],B: [B0, B1, B2]},index[K0, K1, K2])
right pd.DataFrame({C: [C0, C2, C3],D: [D0, D2, D3]},index[K0, K2, K3])
result left.join(right)
print(left,\n,right,\n,result)2.使用join方法将left与right进行外表连接
result left.join(right, howouter)
print(left,\n,right,\n,result)3.使用join方法将left与right进行内表连接.
result left.join(right, howinner)
print(left,\n,right,\n,result)4.创建两个数据帧left、right使用join方法按key列将left与right连接。
left pd.DataFrame({A: [A0, A1, A2, A3],B: [B0, B1, B2, B3], key: [K0, K1, K0, K1]})
right pd.DataFrame({C: [C0, C1],D: [D0, D1]},index[K0, K1])
result left.join(right, onkey)
print(left,\n,right,\n,result)