concat()函数可以对Series,DataFrame按轴进行级联操作,axis参数默认是0,在行上进行连接,axis设置为1,则是在列上进行连接, 函数定义如下
def concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
sort=None, copy=True):
本文以DataFrame进行讲解
import pandas as pd
data1 = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df1 = pd.DataFrame(data1, index=['小明', '小红', '小刚', '小丽'])
data2 = {
'语文': [98, 95, 80, 98],
'数学': [94, 92, 88, 94]
}
df2 = pd.DataFrame(data2, index=['小林', '小李', '小张', '小王'])
df = pd.concat([df1, df2])
print(df)
程序输出结果
语文 数学
小明 90 92
小红 98 87
小刚 87 90
小丽 90 98
小林 98 94
小李 95 92
小张 80 88
小王 98 94
使用concat函数对数据进行连接时, objs参数传入的是列表,本示例中,列表里只有两个DataFrame,但你可以传入更多的。
决定按哪个轴进行连接,默认是0,这样进行连接,相当于进行了append操作
df = df1.append(df2)
print(df)
df1.append(df2)返回的数据与第1小结中使用concat函数连接的结果是一样的。
当axis等于1时,是在列上进行连接
import pandas as pd
data1 = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df1 = pd.DataFrame(data1, index=['小明', '小红', '小刚', '小丽'])
data2 = {
'物理': [98, 95, 80, 98],
'生物': [94, 92, 88, 94]
}
df2 = pd.DataFrame(data2, index=['小明', '小红', '小刚', '小王'])
df = pd.concat([df1, df2], axis=1)
print(df)
程序输出结果
语文 数学 物理 生物
小丽 90.0 98.0 NaN NaN
小刚 87.0 90.0 80.0 88.0
小明 90.0 92.0 98.0 94.0
小王 NaN NaN 98.0 94.0
小红 98.0 87.0 95.0 92.0
小丽没有物理和生物的成绩, 小王没有语文和数学的成绩,这些缺失的值使用np.nan代替。
在第2小节中,axis设置为1时,在列的层面上进行连接操作,join参数默认是outter, 如果改成inner,则结果完全不一样
import pandas as pd
data1 = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df1 = pd.DataFrame(data1, index=['小明', '小红', '小刚', '小丽'])
data2 = {
'物理': [98, 95, 80, 98],
'生物': [94, 92, 88, 94]
}
df2 = pd.DataFrame(data2, index=['小明', '小红', '小刚', '小王'])
df = pd.concat([df1, df2], axis=1, join='inner')
print(df)
程序输出结果
语文 数学 物理 生物
小明 90 92 98 94
小红 98 87 95 92
小刚 87 90 80 88
小明,小红,小刚是两个DataFrame中共同的行标签,当join等于inner时,只有他们三个人的数据会保留下来。
将ignore_index设置为True, 使用concat连接后,原有的索引将被丢弃,结果使用整数索引
import pandas as pd
data1 = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df1 = pd.DataFrame(data1, index=['小明', '小红', '小刚', '小丽'])
data2 = {
'语文': [98, 95, 80, 98],
'数学': [94, 92, 88, 94]
}
df2 = pd.DataFrame(data2, index=['小林', '小李', '小张', '小王'])
df = pd.concat([df1, df2], ignore_index=True)
print(df)
程序输出结果
语文 数学
0 90 92
1 98 87
2 87 90
3 90 98
4 98 94
5 95 92
6 80 88
7 98 94
将多份数据合并后,如果还想标识一个数据的来源, 可以使用keys参数
import pandas as pd
data1 = {
'语文': [90, 98, 87, 90],
'数学': [92, 87, 90, 98]
}
df1 = pd.DataFrame(data1, index=['小明', '小红', '小刚', '小丽'])
data2 = {
'语文': [98, 95, 80, 98],
'数学': [94, 92, 88, 94]
}
df2 = pd.DataFrame(data2, index=['小林', '小李', '小张', '小王'])
df = pd.concat([df1, df2], keys=['a', 'b'])
print(df)
程序输出结果
语文 数学
a 小明 90 92
小红 98 87
小刚 87 90
小丽 90 98
b 小林 98 94
小李 95 92
小张 80 88
小王 98 94
QQ交流群: 211426309