合并两个Pandas数据框(在公共列上连接)

dwthyt8l  于 2023-01-24  发布在  其他
关注(0)|答案(4)|浏览(139)

我有2个 Dataframe :
餐厅_id_ Dataframe

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)

我想使用panda中的DataFrame.join()命令将这两个DataFrame连接成一个 Dataframe 。
我试过下面的代码行:

#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语句而言,我不知道自己做错了什么。
任何帮助都将不胜感激。

jtjikinw

jtjikinw1#

可使用merge将两个 Dataframe 合并为一个:

import pandas as pd
pd.merge(restaurant_ids_dataframe, restaurant_review_frame, on='business_id', how='outer')

其中on指定存在于要连接的两个 Dataframe 中的字段名称,how定义是否使用“来自两个帧的键的联合”进行内部/外部/左/右连接(SQL:因为你在两个 Dataframe 中都有'星星'列,所以默认情况下,这将在组合的 Dataframe 中创建两个列star_x和star_y。正如@DanAllan提到的join方法,你可以通过将其作为kwarg传递来修改merge的后缀。默认值是suffixes=('_x', '_y')。如果你想做类似star_restaurant_idstar_restaurant_review的事情,你可以这样做:

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

此链接中详细解释了这些参数。

hm2xizp9

hm2xizp92#

如果DataFrame有一些共同的列名,则联接失败。最简单的方法是包含lsuffixrsuffix关键字,如下所示:

restaurant_review_frame.join(restaurant_ids_dataframe, on='business_id', how='left', lsuffix="_review")

这样,列就有了不同的名称。文档解决了这个问题。
或者,您可以通过在联接之前删除有问题的列来解决这个问题,例如,如果restaurant_ids_dataframe中的星号对于restaurant_review_frame中的星号是多余的,则可以使用del restaurant_ids_dataframe['stars']

gtlvzcf8

gtlvzcf83#

如果任何人需要尝试合并索引上的两个 Dataframe (而不是另一列),这也是有效的!
T1和T2是具有相同索引的 Dataframe

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

我不得不使用合并,因为追加会不必要地填充NaNs。

hyrbngr7

hyrbngr74#

如果您想水平合并两个数据框,则使用以下代码:

df3 = pd.concat([df1, df2],axis=1, ignore_index=True, sort=False)

相关问题