呀~博主是正在学习数据分析的一员,记录的是自己学习过程中总结的知识点,肯定有不完善的地方,如有问题可以私聊我改正,共同学习进步。希望大家都能保持学习的热情,坚持自己,不断超越自己!
博客地址:qxi的博客
还是可以先预习下前面的知识点耶:
pandas基础知识(1)
pandas基础知识(2)
pandas基础知识(3)
pandas基础知识(4)
pandas基础知识(5)
PS:我先简单说明一下哈,我写的文章标题都是按照1,2,3···这种顺序来写的,可能不是很清楚,但是我每一篇的开头都用粗体字标出来本篇文章讲的是哪些内容,希望大家可以按照这个思路去看,会比较清晰~
#今天这篇主要讲的是利用concat()函数对不同的DataFrame进行合并,也涉及了append()函数#
- 利用
concat()
函数合并
①利用concat()函数进行合并,定义asix=0
时是逐行操作,即上下合并;
②定义ignore_index=True
表示忽略原来的索引,重新排好索引顺序(0,1,2,3···)
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.ones((2,3))*0,columns=['a','b','c'])
df2=pd.DataFrame(np.ones((2,3))*1,columns=['a','b','c'])
df3=pd.DataFrame(np.ones((2,3))*2,columns=['a','b','c'])
print(df1)
print(df2)
print(df3)
res1=pd.concat([df1,df2,df3],axis=0) #逐行操作,上下合并
print(res1)
res2=pd.concat([df1,df2,df3],axis=0,ignore_index=True) #重新排好索引
print(res2)
运行结果:
a b c
0 0.0 0.0 0.0
1 0.0 0.0 0.0 #df1
a b c
0 1.0 1.0 1.0
1 1.0 1.0 1.0 #df2
a b c
0 2.0 2.0 2.0
1 2.0 2.0 2.0 #df3
a b c
0 0.0 0.0 0.0
1 0.0 0.0 0.0
0 1.0 1.0 1.0
1 1.0 1.0 1.0
0 2.0 2.0 2.0
1 2.0 2.0 2.0 #直接就上下合并
a b c
0 0.0 0.0 0.0
1 0.0 0.0 0.0
2 1.0 1.0 1.0
3 1.0 1.0 1.0
4 2.0 2.0 2.0
5 2.0 2.0 2.0 #上下合并完对索引重新排序
③在concat()函数中定义join=’outer’
时,合并之后没有匹配的值会自动用nan值填充;
定义join=’inner’
时,只合并两者都有的值,两者都有b,c,d列
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
df2=pd.DataFrame(np.ones((3,4))*1,columns=['b','c','d','e'],index=[2,3,4])
print(df1)
print(df2)
Res1=pd.concat([df1,df2],join='outer')
print(res1)
Res2=pd.concat([df1,df2],join='inner')
print(res2)
运行结果:
a b c d
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0 #df1
b c d e
2 1.0 1.0 1.0 1.0
3 1.0 1.0 1.0 1.0
4 1.0 1.0 1.0 1.0 #df2
a b c d e
1 0.0 0.0 0.0 0.0 NaN
2 0.0 0.0 0.0 0.0 NaN
3 0.0 0.0 0.0 0.0 NaN
2 NaN 1.0 1.0 1.0 1.0
3 NaN 1.0 1.0 1.0 1.0
4 NaN 1.0 1.0 1.0 1.0 #为res1,直接合并,没有匹配的值用nan值
b c d
1 0.0 0.0 0.0
2 0.0 0.0 0.0
3 0.0 0.0 0.0
2 1.0 1.0 1.0
3 1.0 1.0 1.0
4 1.0 1.0 1.0 #为res2,只合并两者都有的,b,c,d列
append()
函数也可以用来合并DataFrame
①基本形式为df1.append(df2)
把df2合并到df1中;
也可以合并多个,比如df1.append([df2,df3])
把df2与df3合并到df1
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
df2=pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'],index=[2,3,4])
print(df1)
print(df2)
res=df1.append(df2,ignore_index=True) #把df2合并到df1上
print(res)
运行结果:
a b c d
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0 #df1
a b c d
2 2.0 2.0 2.0 2.0
3 2.0 2.0 2.0 2.0
4 2.0 2.0 2.0 2.0 #df2
a b c d
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 2.0 2.0 2.0 2.0
4 2.0 2.0 2.0 2.0
5 2.0 2.0 2.0 2.0 #append()合并
②把单独一行合并到DataFrame中,借助Series
(不懂看前面pandas基础知识(1)),同样也用append()函数
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'],index=[1,2,3])
print(df1)
s=pd.Series([3,3,3,3],index=['a','b','c','d']) #Series结构
res=df1.append(s,ignore_index=True) #把s合并进df1
print(res)
运行结果:
a b c d
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 0.0 0.0 0.0 0.0 #df1
a b c d
0 0.0 0.0 0.0 0.0
1 0.0 0.0 0.0 0.0
2 0.0 0.0 0.0 0.0
3 3.0 3.0 3.0 3.0 #多了一行
关于DataFrame的合并内容相对比较多,除了上面讲的函数,还会用到merge函数,这个就留到下篇文章啦~
记得点赞-收藏-关注我哟