Python 合并两个数据帧(在公共列上连接)

Python 合并两个数据帧(在公共列上连接),python,pandas,dataframe,merge,left-join,Python,Pandas,Dataframe,Merge,Left Join,我有两个数据帧: 餐厅标识数据框 Data columns (total 13 columns): business_id 4503 non-null values categories 4503 non-null values city 4503 non-null values full_address 4503 non-null values latitude 4503 non-null values longi

我有两个数据帧:

餐厅标识数据框

Data columns (total 13 columns):
business_id      4503  non-null values
categories       4503  non-null values
city             4503  non-null values
full_address     4503  non-null values
latitude         4503  non-null values
longitude        4503  non-null values
name             4503  non-null values
neighborhoods    4503  non-null values
open             4503  non-null values
review_count     4503  non-null values
stars            4503  non-null values
state            4503  non-null values
type             4503  non-null values
dtypes: bool(1), float64(3), int64(1), object(8)`

餐厅(回顾)(框架)

Int64Index: 158430 entries, 0 to 229905
Data columns (total 8 columns):
business_id    158430  non-null values
date           158430  non-null values
review_id      158430  non-null values
stars          158430  non-null values
text           158430  non-null values
type           158430  non-null values
user_id        158430  non-null values
votes          158430  non-null values
dtypes: int64(1), object(7)
我想使用pandas中的dataframe.join()命令将这两个数据帧合并成一个数据帧

我尝试了以下代码行:

#the following line of code creates a left join of restaurant_ids_frame and   restaurant_review_frame on the column 'business_id'
restaurant_review_frame.join(other=restaurant_ids_dataframe,on='business_id',how='left')
但当我尝试此操作时,会出现以下错误:

Exception: columns overlap: Index([business_id, stars, type], dtype=object)
我对pandas非常陌生,对于执行join语句,我不知道自己做错了什么


任何帮助都将不胜感激。

如果数据帧有一些共同的列名,则连接将失败。最简单的方法是包含
lsuffix
rsuffix
关键字,如下所示:

restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")
这样,列具有不同的名称。文件


或者,您可以通过在加入之前简单地删除有问题的列来解决这个问题。例如,如果
restaurant\u ids\u dataframe
中的星与
restaurant\u review\u frame
中的星是冗余的,则可以
del restaurant\u ids\u dataframe['stars']

使用合并将两个数据帧合并为一个:

import pandas as pd
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')
其中,on指定两个数据帧中存在的字段名,以加入,以及如何加入 定义其内部/外部/左/右连接是否与外部使用“来自两个帧的键的并集(SQL:完全外部连接)。”由于两个数据帧中都有“星”列,因此默认情况下,这将在组合的数据帧中创建两列“星x”和“星y”。正如@DanAllan在join方法中提到的,可以通过将后缀作为kwarg传递来修改merge的后缀。默认值为
后缀=('ux','uy')
。如果您想执行类似于
star\u restaurant\u id
star\u restaurant\u review
的操作,您可以执行以下操作:

 pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer', suffixes=('_restaurant_id', '_restaurant_review'))

本节将详细说明这些参数

如果有人需要尝试将索引上的两个数据帧合并在一起(而不是另一列),这也可以

T1和T2是具有相同索引的数据帧

import pandas as pd
T1 = pd.merge(T1, T2, on=T1.index, how='outer')

另外,我不得不使用merge,因为append会不必要地填充nan。

它还表示“business\u id”列重叠,因为我正在创建连接,所以它不应该重叠吗?我该如何解决这个问题呢?嘿@DanAllan我尝试了join方法,但我得到的只是餐馆\u ID\u数据框中的4503个条目,以及属于餐馆\u review\u框架的列中的零个条目。你能告诉我为什么会这样吗?我已经按照您的建议使用上述语句执行了左连接,但出于某种原因,它似乎没有给我任何来自餐厅回顾框架的项目。我正在寻找的是创建一个数据框,其中包含来自两个数据框的所有列,并按业务id连接。我还删除了除业务id以外的其他列。如果您仍有兴趣解决此问题,请提供数据重现此问题的示例。您的建议解决了我的问题。我唯一要做的改变是我做了一个内部合并,而不是外部合并。i、 e.如何“内部”而不是外部。感谢您的帮助。how=内部|外部|左侧|右侧,如何合并,左右键的交叉点|联合(所有)左键和右键|仅左键|仅右键|通常与熊猫合并相关的更广泛主题:。