pandas-数据合并join()

概述

本文讲解按照 相同 行索引 合并数据

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   女
总结:
  1. 合并后df1和df2都没变化
  2. 合并后生成新对象,该对象的 行数 以df1为准
  3. 行索引必须一致。
    默认行索引都是从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
总结:
  1. 合并后df1和df2都没变化
  2. 合并后生成新对象,该对象的行数以df2为准,没有的元素就是NaN
  3. 行索引必须一致
    默认行索引都是从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
总结:
  1. 合并后df1和df2都没变化
  2. 合并后生成新对象,该对象的行数以df2为准,没有的元素就是NaN
  3. 相同的行索引才能正确合并,不同的行索引合并后出现NaN

原文出处:/show_1EF3CfZ5m4tA.html