Combine two pandas Data Frames (join on a common column)

我有两个数据框:

饭店 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)

我想使用“熊猫”中的 DataFrame.join ()命令将这两个 DataFrames 合并到一个数据框架中。

我已经尝试了以下代码行:

#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)

我对熊猫非常陌生,不知道我在执行 join 语句时做错了什么。

如果你能帮忙,我将不胜感激。

236151 次浏览

如果 DataFrames 有一些共同的列名,则连接失败。最简单的方法是包含一个 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']

您可以使用 合并将两个数据框架合并为一个:

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

其中 on指定了存在于两个数据帧中的要加入的字段名,并且 < strong > 如何加入 定义它的内部/外部/左部/右部连接,外部使用来自两个框架的键的联合(SQL: 全部外部连接)。由于在两个数据框中都有“ star”列,因此默认情况下将在合并的数据框中创建两个列 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'))

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

如果有人需要尝试合并索引上的两个数据框架(而不是另一个列) ,这也可以工作!

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

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

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

如果要水平合并两个 DataFrames,请使用以下代码:

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