Pandas 合并多个Dataframe(merge,concat)

本文详细介绍了如何使用Pandas库中的merge和concat函数进行数据表的合并与拼接,包括左连接、多键合并及列拼接的实现方法。

pd.merge()

在数据处理的时候经常会遇到多个表单的合并问题,比如一个表单有user_idage这两个字段,另一个表单有user_idsex这两个字段,要把这两个表合并成只有user_idagesex三个字段的表。

普通的拼接是做不到的,因为user_id每一行之间不是对应的。pandas中有个merge函数可以做到这个实用的功能。

df = pd.merge(df1, df2, how='left', on='user_id')

用法很简单,说一下后两个参数就可以了,how=""参数表示以哪个表的key为准,上面的how="left"表示以表df1为准,而key也就是on=""的参数

how="left"就是说,保留user_id字段的全部信息,不增加也不减少,但是拼接的时候只把df2表中的与df1中user_id字段交集的部分合并上就可以了,如果df2中出现了某个user_id在df1中没有出现,就抛弃掉这个样本不作处理。

如果要进行多key合并:

df = pd.merge(df1, df2, how='left', on=['user_id','sku_id'])

pd.concat()

但是如果想仅进行简单的“拼接”而不是合并呢,要使用concat函数:

df = pd.concat([df_user, dummies_sex, dummies_age, dummies_level], axis=1 )

这样可以保留这些表单的全部信息,参数axis=1表示列拼接,axis=0表示行拼接。

要保证每个表单的行数是相同的,并且每一行对应的key也是相同的,列拼接才变得有意义。

### `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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值