概述
本文讲解按照 相同 行索引 合并数据
join
把两个DataFrame对象按照 行索引相同 的数据合并到一起
语法
data_frame.join(data_frame2)
参数
- data_frame2:dataframe对象
返回值
dataframe对象
例子1 含有相同列会报错
import pandas as pd
df1=pd.DataFrame([{'name':'李雷','age':20,'phone':'13700000011'},{'name':'韩梅梅','age':18,'phone':'13800011123'}])
df2=pd.DataFrame([{'name':'韩梅梅','sex':'女'},{'name':'lucy','sex':'女'},{'name':'李雷','sex':'男'}])
df3=df1.join(df2)
print(df1)
print(df2)
print('*'*50)
print(df3)
报错如下:
ValueError: columns overlap but no suffix specified: Index(['name'], dtype='object')
两个dataframe对象的列不能重复,否则报错
例子2
以df1为基础,将df1和df2合并
import pandas as pd
df1=pd.DataFrame([{'name':'李雷','age':20,'phone':'13700000011'},{'name':'韩梅梅','age':18,'phone':'13800011123'}])
df2=pd.DataFrame([{'name2':'韩梅梅','sex':'女'},{'name2':'lucy','sex':'女'},{'name2':'李雷','sex':'男'}])
df3=df1.join(df2)
print(df1)
print(df2)
print('*'*50)
print(df3)
结果如下:
age name phone
0 20 李雷 13700000011
1 18 韩梅梅 13800011123
name2 sex
0 韩梅梅 女
1 lucy 女
2 李雷 男
**************************************************
age name phone name2 sex
0 20 李雷 13700000011 韩梅梅 女
1 18 韩梅梅 13800011123 lucy 女
总结:
- 合并后df1和df2都没变化
- 合并后生成新对象,该对象的 行数 以df1为准
- 行索引必须一致。
默认行索引都是从0开始的整数
例子3
以df2为基础,将df1和df2合并
import pandas as pd
df1=pd.DataFrame([{'name':'李雷','age':20,'phone':'13700000011'},{'name':'韩梅梅','age':18,'phone':'13800011123'}])
df2=pd.DataFrame([{'name2':'韩梅梅','sex':'女'},{'name2':'lucy','sex':'女'},{'name2':'李雷','sex':'男'}])
df3=df2.join(df1)
print(df1)
print(df2)
print('*'*50)
print(df3)
结果如下:
age name phone
0 20 李雷 13700000011
1 18 韩梅梅 13800011123
name2 sex
0 韩梅梅 女
1 lucy 女
2 李雷 男
**************************************************
name2 sex age name phone
0 韩梅梅 女 20.0 李雷 13700000011
1 lucy 女 18.0 韩梅梅 13800011123
2 李雷 男 NaN NaN NaN
总结:
- 合并后df1和df2都没变化
- 合并后生成新对象,该对象的行数以df2为准,没有的元素就是NaN
- 行索引必须一致
默认行索引都是从0开始的整数
例子4
行索引不同时,无法合并
import pandas as pd
df1=pd.DataFrame([{'name':'李雷','age':20,'phone':'13700000011'},{'name':'韩梅梅','age':18,'phone':'13800011123'}],index=['A','B'])
df2=pd.DataFrame([{'name2':'韩梅梅','sex':'女'},{'name2':'lucy','sex':'女'},{'name2':'李雷','sex':'男'}],index=['A','A1','A2'])
df3=df2.join(df1)
print(df1)
print(df2)
print('*'*50)
print(df3)
结果如下:
age name phone
A 20 李雷 13700000011
B 18 韩梅梅 13800011123
name2 sex
A 韩梅梅 女
A1 lucy 女
A2 李雷 男
**************************************************
name2 sex age name phone
A 韩梅梅 女 20.0 李雷 13700000011
A1 lucy 女 NaN NaN NaN
A2 李雷 男 NaN NaN NaN
总结:
- 合并后df1和df2都没变化
- 合并后生成新对象,该对象的行数以df2为准,没有的元素就是NaN
- 相同的行索引才能正确合并,不同的行索引合并后出现NaN