Pandas 拼接(concat),前面介绍了Pandas合并,Pandas另一种数据整合操作叫做拼接(concatenation),Pandas的convat()
函数实现了索引拼接的功能。
阅读本章内容前,可以先学习Pandas基础教程及Pandas数据读写。
concatenate() 函数
Numpy的 concatenate()函数就是用于数组的拼接操作。如下所示:
import numpy as np
array1 = np.array([[0,1,2],[3,4,5],[6,7,8]])
array2 = array1 + 6
print(array2)
print("------------")
print(np.concatenate([array1, array2],axis=0))
print("------------")
print(np.concatenate([array1, array2],axis=1))
输出结果如下:
concat() 函数
Pandas库以及它的Series和DataFrame等数据结构实现了带编号的索引,Pandas的concat()函数实现了按索引拼接的功能。如下所示:
import pandas as pd
import numpy as np
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(ser1)
print('------------')
print(ser2)
print('------------')
print(pd.concat([ser1, ser2]))
输出结果如下所示:
1 0.459076
2 0.102168
3 0.779139
4 0.691197
dtype: float64
------------
5 0.164705
6 0.948454
7 0.839946
8 0.835565
dtype: float64
------------
1 0.459076
2 0.102168
3 0.779139
4 0.691197
5 0.164705
6 0.948454
7 0.839946
8 0.835565
dtype: float64
concat()函数默认按照axis=0
这条轴进行拼接数据,并返回Series对象。如果指定axis=1
,返回结果将是DataFrame对象,如下所示:
import pandas as pd
import numpy as np
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2], axis=1))
输出结果如下:
concat()
函数默认为外连接操作,把join
选项设置为inner
,可以执行内连接操作,如下所示:
import pandas as pd
import numpy as np
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
df = pd.concat([ser1, ser2], axis=1)
print(df)
print('--------')
print(pd.concat([ser1, df], axis=1, join='inner'))
输出结果如下:
等级索引
假如我们想用于拼接的轴上创建等级索引,可以借助keys
选项来完成,如下所示:
import pandas as pd
import numpy as np
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2], keys=[1,2]))
输出结果如下:
按照axis
拼接Series
对象,指定的键变成拼接后得到的DataFrame对象列的名称,如下所示:
import pandas as pd
import numpy as np
ser1 = pd.Series(np.random.rand(4), index=[1,2,3,4])
ser2 = pd.Series(np.random.rand(4), index=[5,6,7,8])
print(pd.concat([ser1, ser2], axis=1,keys=[1,2]))
输出结果如下:
DataFrame 对象的拼接
前面介绍的是Series对象的拼接,DataFrame 对象的拼接方法与之相同,如下所示:
import pandas as pd
import numpy as np
frame1 = pd.DataFrame(np.random.rand(9).reshape(3,3), index=[1,2,3],columns=['A','B','C'])
frame2 = pd.DataFrame(np.random.rand(9).reshape(3,3), index=[4,5,6],columns=['A','B','C'])
print(pd.concat([frame1,frame2]))
输出结果如下:
指定axis=1
拼接数据,如下所示:
import pandas as pd
import numpy as np
frame1 = pd.DataFrame(np.random.rand(9).reshape(3,3), index=[1,2,3],columns=['A','B','C'])
frame2 = pd.DataFrame(np.random.rand(9).reshape(3,3), index=[4,5,6],columns=['A','B','C'])
print(pd.concat([frame1,frame2], axis=1))
输出结果如下: