본문 바로가기
Python/Pandas

Pandas 활용 테이블 결합 방법

by 찐남 2021. 8. 19.
 본 내용을 보기 전에 Python 사전 준비 및 Python 완전 기초를 먼저 이해하셔야 합니다.
본 포스팅은 pandas 공식 홈페이지를 기반으로 작성하였습니다. 

 

본 포스팅의 실습을 위해 사용할 2개의 데이터 세트는 아래와 같습니다.

 

air_quality_no2_long.csv
0.15MB

(NO2에 대한 대기질 데이터로, openaq에서 제공하고 py-openaq 패키지를 사용하여 다운로드 가능. air_quality_no2_long.csv 데이터 세트는 각각 파리, 앤트워프 및 런던에 있는 측정 스테이션 FR04014, BETR801 및 런던 웨스트민스터에 대한 NO2 값 제공)

 

import pandas as pd
air_quality_no2 = pd.read_csv("D:/python_exer/air_quality_no2_long.csv", parse_dates = True)
air_quality_no2 = air_quality_no2[["date.utc", "location", "parameter", "value"]]
air_quality_no2.head()

 

 

air_quality_pm25_long.csv
0.09MB

(2.5마이크로미터 미만의 미립자 물질에 ​​대한 대기질 데이터로, openaq에서 제공하고 py-openaq 패키지를 사용하여 다운로드 가능. air_quality_pm25_long.csv 데이터 세트는 각각 파리, 앤트워프 및 런던에 있는 측정 스테이션 FR04014, BETR801 및 런던 웨스트민스터에 대한 PM25 값 제공)

 

air_quality_pm25 = pd.read_csv("D:/python_exer/air_quality_pm25_long.csv", parse_dates=True)
air_quality_pm25 = air_quality_pm25[["date.utc", "location", "parameter", "value"]]
air_quality_pm25.head()

 

 

 

 

 

 

 

 

1. 테이블 결합 방법

 

1.1. 객체 연결

 

 

1.1.1. 비슷한 구조의 두 테이블인 NO2와 PM25의 측정값을 하나의 테이블에 결합하기

 

air_quality = pd.concat([air_quality_no2, air_quality_pm25], axis = 0)
air_quality

 

 

concat() 함수는 축 중 하나를 따라 여러 테이블의 연결 작업을 수행합니다(행 또는 열). 기본적으로 연결은 축 0을 따르므로 결과 테이블은 입력 테이블의 행을 결합합니다. 원본과 연결된 테이블의 형태를 확인하여 어떻게 동작 하는 지 확인해 보겠습니다.

 

print('Shape of the ''air_quality_no2'' table: ', air_quality_no2)
print('Shape of the ''air_quality_pm25'' table: ', air_quality_pm25)
print('Shape of the resulting ''air_quality'' table: ', air_quality)

 

따라서 결과 테이블에는 3178 = 1110 + 2068 행이 있습니다.  (Note: axis 인수는 축을 따라 적용할 수 있는 여러 pandas 메서드에서 반환됩니다. DataFrame에는 두 개의 해당 축이 있습니다. 첫 번째는 행(축 0)을 가로질러 수직으로 아래쪽으로 실행되고 두 번째는 열(축 1)을 가로질러 가로로 실행됩니다. 연결 또는 요약 통계와 같은 대부분의 작업은 기본적으로 행(축 0)에 걸쳐 있지만 열에도 적용될 수 있습니다.)

 

날짜/시간 정보에 대한 테이블 정렬은 원본 테이블을 정의하는 매개변수 열과 함께 두 테이블의 조합을 보여줍니다(테이블 air_quality_no2의 no2 또는 테이블 air_quality_pm25의 pm25).

 

air_quality = air_quality.sort_values(by = "date.utc")
air_quality.head()

 

 

이 특정 예에서 데이터가 제공하는 매개변수 열은 원본 테이블 각각을 식별할 수 있도록 합니다. 항상 그런 것은 아닙니다. concat 함수는 추가(계층적) 행 인덱스를 추가하여 keys 인수로 편리한 솔루션을 제공합니다. 아래의 예시를 보겠습니다.

 

air_quality = pd.concat([air_quality_pm25,air_quality_no2], keys = ["pm25","no2"])
air_quality.head()

 

 

(Note: 동시에 여러 행/열 인덱스의 존재는 본 포스팅에서는 언급하지 않았습니다. 계층적 인덱싱 또는 MultiIndex는 고차원 데이터를 분석하는 강력한 고급 pandas ​​기능입니다. MultiIndexing은 이 pandas 소개의 범위를 벗어납니다. 잠시 동안 reset_index 함수를 사용하여 인덱스의 모든 수준을 열로 변환할 수 있습니다(ex. air_quality.reset_index(level=0))

 

 

 

 

 

 

 

2. 공통 식별자를 사용하여 테이블 조인

 

 

2.1. 역의 좌표(위도, 경도)를 측정 테이블의 해당 행에 추가하기

 

공기질 측정 역의 좌표는 py-openaq 패키지를 사용하여 다운로드하여 air_quality_stations.csv 형식으로 저장합니다. 아래 데이터를 다운로드 받으시면 됩니다.

 

air_quality_stations.csv
0.00MB

 

stations_coord = pd.read_csv("D:/python_exer/air_quality_stations.csv")
stations_coord.head()

 

 

(Note: 이 예에서 사용된 스테이션(FR04014, BETR801 및 London Westminster)은 메타데이터 테이블에 등록된 세 개의 항목일 뿐입니다. air_quality 테이블의 해당 행에 있는 이 세 개의 좌표만 측정 테이블에 추가하려고 합니다.)

 

air_quality.head()

 

 

air_quality = pd.merge(air_quality, stations_coord, how="left", on="location")
air_quality.head()

 

 

merge() 함수를 사용하여 air_quality 테이블의 각 행에 대해 stations_coord 테이블에서 해당 좌표가 추가됩니다. 두 테이블에는 정보를 결합하는 키로 사용되는 공통 열 location이 있습니다. left join을 선택하면 air_quality(왼쪽) 테이블에서 사용 가능한 location(예: FR04014, BETR801 및 London Westminster)만 결과 테이블에 표시됩니다. merge 함수는 데이터베이스 스타일 작업과 유사한 여러 조인 옵션을 지원합니다. 

 

2.2. 매개변수 전체 설명 및 이름 추가하기

 

이의 예제를 위해 아래 데이터를 다운로드합니다.

 

air_quality_parameters.csv
0.00MB

 

air_quality_parameters = pd.read_csv("D:/python_exer/air_quality_parameters.csv") air_quality_parameters.head()

 

 

 

air_quality = pd.merge(air_quality, air_quality_parameters, how='left', left_on='parameter', right_on='id')
air_quality.head()

 

 

앞의 예와 비교하여 공통된 열 이름이 없습니다. 그러나 air_quality 테이블의 매개변수 열과  air_quality_parameters_name의 id 열은 모두 공통 형식으로 측정된 변수를 제공합니다. left_on 및 right_on 인수는 두 테이블의 join key 인수입니다. 

 

3. REMEMBER !

 

  • concat 함수를 사용하여 여러 테이블을 열 및 행 단위로 연결할 수 있습니다.
  • 데이터베이스와 같은 테이블 병합/조인의 경우 병합 기능을 사용합니다.

 



반응형

'Python > Pandas' 카테고리의 다른 글

Pandas 텍스트 데이터 다루기  (0) 2021.08.21
Pandas 시계열 데이터 다루기  (0) 2021.08.20
Pandas 테이블 구조 변경 방법  (0) 2021.08.18
Pandas 활용 요약통계량 생성하기  (0) 2021.08.17
Pandas 신규 Column 생성  (0) 2021.08.16

댓글