python 基础(25)

114 阅读2分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」。

昨天提到了下merge()函数,它是将两张数据表通过相同键(列名的意思)进行数据合并,这有点类似于数据库里面的Join,左链接右链接这样子。


import pandas as pd
data1 = {'a':[1,2],
         'b':[11,22]}
data2 = {'a':[111,222],
           'd':[1111,2222]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

我们用下昨天的数据,将data1,data2 中相同的键进行合并.(我们将data2的其中一个键改为了a)

print(pd.merge(df1,df2,on='a'))

image.png

得到了一个Empty DataFrame,原因就是data1和data2的a值并不相同,我们修改一下程序的内容,看看是否能解决这个问题

import pandas as pd
data1 = {'a':[1,2],
         'b':[11,22]}
data2 = {'a':[1,2],
           'd':[1111,2222]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(pd.merge(df1,df2,on='a'))

运行结果如下: image.png

那么,如果我们遇到的就是data1和data2的a值不相同的情况,我们需要怎么处理呢?这时候我们用到的就是outer外连接的方法了。具体使用方法如下:


import pandas as pd
data1 = {'a':[1,2],
         'b':[11,22]}
data2 = {'a':[111,222],
           'd':[1111,2222]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(pd.merge(df1,df2,how='outer',on='a'))

输出如下,它会自动给bd补满空值。

image.png

除了merge(),还可以用join()方法来实现数据的合并,join的话可以将没有关联的数据进行合并,也可以合并相同列名的数据。例如,我们将前面data2的a改回c。

import pandas as pd
data1 = {'a':[1,2],
         'b':[11,22]}
data2 = {'c':[111,222],
           'd':[1111,2222]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

这时候,我们希望data1,2能够不用Outer的链接,

print(df1.join(df2))

运行结果如下:

image.png

很显然,当合并两个没关联的数据时,直接调用join()就可以达到数据合并的效果。