合并两个 pandas 数据框(加入公共列)

新手上路,请多包涵

我有 2 个数据框:

restaurant_ids_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,使用 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)

我对熊猫很陌生,就执行连接语句而言,我不知道我做错了什么。

任何帮助将非常感激。

原文由 anonuser0428 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 288
2 个回答

您可以使用 merge 将两个数据帧合并为一个:

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

where on 指定存在于两个数据框中的字段名称以加入,以及 如何 定义其内部/外部/左/右连接,外部使用“来自两个框架的键的联合(SQL:完全外部连接)”。由于您在两个数据框中都有“星”列,因此默认情况下会在组合数据框中创建两列 star_x 和 star_y。正如@DanAllan 提到的 join 方法,您可以通过将其作为 kwarg 传递来修改合并的后缀。默认为 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'))

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

原文由 mlimb 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

这样,列就有了不同的名称。该文档 解决了这个问题

或者,您可以通过在加入之前简单地删除有问题的列来解决这个问题。例如,如果 --- 中的星星对于 restaurant_review_frame restaurant_ids_dataframe 中的星星是多余的,你可以 del restaurant_ids_dataframe['stars']

原文由 Dan Allan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题