merge的作用:
merge
函数在Python的pandas
库中的作用是用来合并两个或多个DataFrame数据表,依据指定的一个或多个键(通常是列名)进行连接操作[1]。
merge
函数可以有多种连接类型(如内连接inner
、左连接left
、右连接right
、全连接outer
)来组合多个DataFrame列表:
inner:
内连接(inner join):仅返回键名在两个DataFrame中都存在的行
手动生成两个DataFrame对象
import pandas as pd
left = pd.DataFrame(data=[["K0","K0","A0","B0"], ["K0", "K1","A1","B1"], ["K1", "K0","A2","B2"], ["K2", "K1","A3","B3"]], columns=["key1", "key2","A","B"])
left
right = pd.DataFrame(data=[["K5","K0","C0","D0"], ["K1", "K0","C1","D1"], ["K1", "K0","C2","D2"], ["K2", "K1","C3","D3"]], columns=["key1", "key2","C","D"])
right
内连接:
# inner
# F3
result = pd.merge(left,right,how="inner",on = ["key1", "key2"])
result
代码F3讲解:
在此示例中,left
和right
是待合并的DataFrame,how='inner'用来指定连接方式
,on=['key1', 'key2']
表示根据key1
和key2
这两列进行连接。连接后的结果存储在新的DataFrame result
中
outer:
全连接: 返回左右DataFrame中所有键的所有行,任何一方没有匹配键的行都会用NaN填充缺失的数据。
# outer
# F4
result = pd.merge(left,right,how="outer",on = ["key1", "key2"])
result
这个图不完整,刚才没有显示完但注释是对的。
完整的:
left:
左连接: 左连接同样基于键列,但其结果集包含了左DataFrame的所有行。对于这些行,如果它们在右DataFrame中找到匹配的键值,则会将右表对应列的值合并进来;若在右表中找不到匹配项,则相应的位置会被填充NaN或其他默认缺失值。这意味着左连接确保了左表的所有记录都会出现在结果集中。
# left
# F6
result = pd.merge(left,right,how="left",on = ["key1", "key2"])
result
right:
右连接:与左连接相反,右连接保证了右DataFrame的所有行都会出现在结果集中。每行右边数据表中的记录,如果有在左边数据表中匹配的键值,则会合并左表相应列的值;如果没有匹配项,则左边相关位置使用NaN填充。
# right
# F6
result = pd.merge(left,right,how="right",on = ["key1", "key2"])
result
我的疑惑: 还是纵向和横向的问题,
这里的 how="left"
就已经指定了进行左连接操作,即保留 left
DataFrame 中的所有行,并根据 key1
和 key2
列与 right
DataFrame 进行匹配合并。
axis
参数并不适用于 pd.merge()
函数,它是用于像 pd.concat()
这样的函数,用于指定是沿着行(axis=0)还是列(axis=1)进行拼接操作。在做表连接时无需指定 axis
参数。所以,上述代码去掉 axis=1
后是正确的。
[1]通义千问(2024)AI文本提问.merge的作用https://tongyi.aliyun.com/qianwen/?sessionId=f78ee60c3a39451ca41740527b74eb3e通义千问 (aliyun.com)https://tongyi.aliyun.com/qianwen/?sessionId=f78ee60c3a39451ca41740527b74eb3e