programing

두 판다 데이터 프레임 결합(공통 열에 결합)

muds 2023. 8. 29. 21:01
반응형

두 판다 데이터 프레임 결합(공통 열에 결합)

2개의 데이터 프레임이 있습니다.

레스토랑_ids_데이터프레임

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() 명령을 사용하여 하나의 데이터 프레임으로 만들고 싶습니다.

다음 코드 라인을 사용해 보았습니다.

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

저는 판다가 매우 생소하며 가입 성명서를 실행하는 것에 관한 한 제가 무엇을 잘못하고 있는지 전혀 모릅니다.

어떤 도움이라도 주시면 감사하겠습니다.

병합을 사용하여 두 데이터 프레임을 하나로 결합할 수 있습니다.

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

여기서 on은 조인할 두 데이터 프레임에 존재하는 필드 이름을 지정하고, 에서는 '두 프레임에서 키의 결합(SQL: 전체 외부 조인)'을 사용하여 외부와 결합할 내부/외부/좌/우 결합 여부를 정의합니다.두 데이터 프레임 모두에 'star' 열이 있으므로 결합된 데이터 프레임에는 기본적으로 star_x 및 star_y 열이 두 개 생성됩니다.@DanAllan이 조인 방법에 대해 언급했듯이 kwarg로 전달하여 병합할 접미사를 수정할 수 있습니다.기본값은 입니다.suffixes=('_x', '_y')만약 당신이 그런 것을 하고 싶다면.star_restaurant_id그리고.star_restaurant_review할 수 있는 일:

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

매개 변수는 이 링크에 자세히 설명되어 있습니다.

데이터 프레임에 공통 열 이름이 있으면 가입이 실패합니다.가장 간단한 방법은 다음을 포함하는 것입니다.lsuffix또는rsuffix다음과 같은 키워드:

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'].

다른 열 대신 인덱스에서 두 개의 데이터 프레임을 함께 병합해야 하는 경우에도 효과적입니다.

T1 및 T2는 동일한 인덱스를 가진 데이터 프레임입니다.

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

추신: append가 불필요하게 NaNs를 채울 것이기 때문에 merge를 사용해야 했습니다.

두 개의 데이터 프레임을 수평으로 병합하려는 경우 다음 코드를 사용합니다.

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

언급URL : https://stackoverflow.com/questions/18792918/combine-two-pandas-data-frames-join-on-a-common-column

반응형