pandas中DataFrame的merge操作


前言

本文主要记录我在阅读《Python金融大数据分析》一书时,原本对书中DataFrame的merge操作有点疑惑,后来通过实验发现书上代码在现有环境下已经报错的事实。因此,进行整理记录。


一、merge操作是什么?

merge是对pandas的DataFrame对象进行合并的操作。其具体参数如下:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
			 left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'),
			 copy=None, indicator=False, validate=None)

二、代码实验

1.新建DataFrame

代码如下:

import pandas as pd
df1 = pd.DataFrame(['100','200','300','400'],index=['a','b','c','d'],columns=['A',])
df2 = pd.DataFrame(['200','150','50'],index=['f','b','d'],columns=['B',])
c = pd.Series([250,150,50],index=['b','d','c'])
df1['C'] = c
df2['C'] = c

DataFrame输出如下:

在这里插入图片描述
在这里插入图片描述

2.merge操作

例1:默认情况下,以C作为合并列

pd.merge(df1,df2)

在这里插入图片描述
例2:显性设置合并列为C

pd.merge(df1,df2,on='C')

在这里插入图片描述
例3:设置外连接,可以理解为并集,默认还是以C为合并列

pd.merge(df1,df2,how='outer')

在这里插入图片描述
例4:左DataFrame以A列为合并列,右DataFrame以B列为合并列

pd.merge(df1,df2,left_on='A',right_on='B')

在这里插入图片描述
例5:左DataFrame以A列为合并列,右DataFrame以B列为合并列,并集

pd.merge(df1,df2,left_on='A',right_on='B',how='outer')

在这里插入图片描述
例6:左DataFrame以索引为合并列,右DataFrame以索引为合并列

pd.merge(df1,df2,left_index=True,right_index=True)

在这里插入图片描述
例7:企图以C为合并列,同时左DataFrame以索引为合并列

pd.merge(df1,df2,left_index=True,on='C')

在这里插入图片描述
系统会抛出合并异常,说合并列和索引不能同时设置,MergeError: Can only pass argument “on” OR “left_index” and “right_index”, not a combination of both.


总结

以上就是要记录/勘误的内容,本文仅仅简单介绍了pandas中DataFrame的merge使用。书中可能还存在许许多多的错误,仍有待我们去发掘。每一次小小的发现都是大大的收获。

### `merge`方法 `merge`方法用于将两个DataFrame按照一个或多个键进行合并,类似于SQL中的连接操作。以下是一个简单的使用示例: ```python import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]}) df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]}) # 使用merge方法合并DataFrame merged_df = pd.merge(df1, df2, on='key') print(merged_df) ``` 在上述代码中,`pd.merge(df1, df2, on='key')`表示按照`key`列将`df1`和`df2`进行合并。默认情况下,`merge`方法使用的是内连接(inner join),只保留两个DataFrame中`key`列值都存在的行。 ### `concat`方法 `concat`方法相当于数据库中的全连接(union all),它可以指定连接的方式(outer join或inner join),还可以指定按照某个轴进行连接。与数据库不同的是,它不会去重,但是可以使用`drop_duplicates`方法达到去重的效果。以下是一个使用示例: ```python import pandas as pd # 创建两个DataFrame df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]}) # 使用concat方法进行连接 concatenated_df = pd.concat([df1, df2], axis=0) print(concatenated_df) ``` 在上述代码中,`pd.concat([df1, df2], axis=0)`表示按行(axis=0)将`df1`和`df2`连接起来。 ### `drop_duplicates`方法 `drop_duplicates`方法是Pandas中用于处理重复数据的一个非常有用的工具。通过深入了解其用法和参数,可以更精确地控制重复数据的处理方式。以下是一个使用示例: ```python import pandas as pd # 创建一个包含重复数据的DataFrame data = {'col1': [1, 2, 2, 3], 'col2': ['a', 'b', 'b', 'c']} df = pd.DataFrame(data) # 使用drop_duplicates方法去除重复行 unique_df = df.drop_duplicates() print(unique_df) ``` 在上述代码中,`df.drop_duplicates()`会去除`df`中所有列值都相同的重复行。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾师土匪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值