Pandas에서 인덱싱 및 슬라이싱하는 방법

Pandas에서 인덱싱 및 슬라이싱하는 방법

Pandas
Pandas에서 인덱싱 및 슬라이싱하는 방법
Author

gabriel yang

Published

August 29, 2024

Pandas는 데이터 분석을 위한 가장 강력한 도구 중 하나로, 데이터프레임에서 필요한 데이터를 선택하고 조작하는 데 다양한 인덱싱 및 슬라이싱 기능을 제공합니다. 이 글에서는 Pandas에서 데이터를 인덱싱하고 슬라이싱하는 방법에 대해 단계별로 설명하겠습니다.

1. 데이터프레임과 시리즈에서 기본적인 인덱싱

Pandas의 데이터프레임(DataFrame)은 행과 열로 구성된 2차원 자료구조입니다. 데이터프레임의 각 열은 시리즈(Series)라는 1차원 자료구조로 나타낼 수 있습니다.

import pandas as pd

# 예시 데이터프레임 생성
data = {'이름': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
        '나이': [25, 32, 23, 35, 29],
        '점수': [85, 88, 91, 79, 95]}
df = pd.DataFrame(data)
display(df)
이름 나이 점수
0 Alice 25 85
1 Bob 32 88
2 Charlie 23 91
3 David 35 79
4 Eva 29 95

테스트를 위한 데이터프레임을 생성합니다.

# 특정 열 선택 (Series 반환)
name_series = df['이름']
name_series
0      Alice
1        Bob
2    Charlie
3      David
4        Eva
Name: 이름, dtype: object

위 예시에서 df['이름']이름 열을 선택하여 시리즈를 반환합니다. 이렇게 특정 열을 선택하는 기본적인 인덱싱 방식은 간단하면서도 자주 사용됩니다.

2. .loc[].iloc[]를 이용한 인덱싱

.loc[].iloc[]는 데이터프레임에서 행과 열을 선택할 때 주로 사용하는 메서드입니다. 이 둘의 차이점과 사용 방법을 살펴보겠습니다.

2.1. .loc[]: 라벨(Label) 기반 인덱싱

.loc[]는 데이터프레임의 라벨(인덱스와 컬럼 이름)을 기준으로 데이터를 선택합니다.

# 라벨을 사용한 행 선택
display(df)
row_loc = df.loc[2]
display(row_loc)
이름 나이 점수
0 Alice 25 85
1 Bob 32 88
2 Charlie 23 91
3 David 35 79
4 Eva 29 95
이름    Charlie
나이         23
점수         91
Name: 2, dtype: object

위 코드에서 .loc[]는 행과 열 라벨을 사용하여 데이터를 선택합니다. df.loc[2]는 2번째 인덱스에 해당하는 전체 행을 반환합니다. 인덱스는 0부터 시작하기 때문에 3번째열의 정보가 지정됩니다.

# 라벨을 사용한 특정 행과 열 선택
display("데이터프레임")
display(df)
cell_loc = df.loc[2, '이름']
display("슬라이싱 결과")
display(cell_loc)
'데이터프레임'
이름 나이 점수
0 Alice 25 85
1 Bob 32 88
2 Charlie 23 91
3 David 35 79
4 Eva 29 95
'슬라이싱 결과'
'Charlie'

df.loc[2, '이름']은 2번째 행의 이름 열 값을 반환합니다.

# 라벨을 사용한 슬라이싱 (2번째부터 4번째 행까지)
display("데이터프레임")
display(df)
slice_loc = df.loc[1:3]
display("슬라이싱 결과")
display(slice_loc)
'데이터프레임'
이름 나이 점수
0 Alice 25 85
1 Bob 32 88
2 Charlie 23 91
3 David 35 79
4 Eva 29 95
'슬라이싱 결과'
이름 나이 점수
1 Bob 32 88
2 Charlie 23 91
3 David 35 79

loc()함수를 사용한 슬라이싱 문법은 sequence[start:stop:step]와 같습니다. .loc함수에 슬라이싱을 사용하면 start와 stop을 포함하는 위치를 지정하고 결과는 1,2,3열이 슬라이싱되어 출력됩니다.

2.2. .iloc[]: 정수(Integer) 기반 인덱싱

.iloc[]는 정수 인덱스를 사용하여 데이터를 선택합니다. 이는 데이터프레임의 실제 위치를 기준으로 합니다.

display("데이터프레임")
display(df)
# 정수를 사용한 행 선택
row_iloc = df.iloc[2]
display(row_iloc)

# 정수를 사용한 특정 행과 열 선택
cell_iloc = df.iloc[2, 0]
display(cell_iloc)

# 정수를 사용한 슬라이싱 (1번째부터 3번째 행까지)
slice_iloc = df.iloc[1:4]
display(slice_iloc)
'데이터프레임'
이름 나이 점수
0 Alice 25 85
1 Bob 32 88
2 Charlie 23 91
3 David 35 79
4 Eva 29 95
이름    Charlie
나이         23
점수         91
Name: 2, dtype: object
'Charlie'
이름 나이 점수
1 Bob 32 88
2 Charlie 23 91
3 David 35 79

.iloc[]는 정수 인덱스를 사용하여 데이터를 선택하며, df.iloc[2]는 세 번째 행의 전체 데이터를 반환합니다. 또한 df.iloc[2, 0]은 세 번째 행의 첫 번째 열 데이터를 반환합니다.

3. 조건을 사용한 인덱싱

Pandas에서는 특정 조건을 만족하는 데이터를 필터링할 수 있습니다. 이를 통해 조건에 맞는 행을 선택할 수 있습니다.

# 나이가 30 이상인 사람들 선택
age_filter = df[df['나이'] >= 30]
display(age_filter)

# 이름이 'Alice'인 사람 선택
name_filter = df[df['이름'] == 'Alice']
display(name_filter)
이름 나이 점수
1 Bob 32 88
3 David 35 79
이름 나이 점수
0 Alice 25 85

위 코드에서는 조건식을 사용하여 데이터를 필터링합니다. df['나이'] >= 30은 나이가 30 이상인 행을 필터링하고, df['이름'] == 'Alice'는 이름이 ’Alice’인 행을 선택합니다.

4. 열과 행을 동시에 선택하기

데이터프레임에서 특정 행과 열을 동시에 선택하려면 .loc[].iloc[]를 결합하여 사용하면 됩니다.

# 특정 행과 열 동시 선택
specific_cell = df.loc[2, '점수']
display(specific_cell)

# 특정 행과 여러 열 동시 선택
multiple_cells = df.loc[2, ['이름', '점수']]
display(multiple_cells)

# 여러 행과 여러 열 동시 선택
subset = df.loc[1:3, ['이름', '점수']]
display(subset)
91
이름    Charlie
점수         91
Name: 2, dtype: object
이름 점수
1 Bob 88
2 Charlie 91
3 David 79

이 경우, df.loc[2, '점수']는 두 번째 인덱스 행의 점수 열을 반환하며, df.loc[2, ['이름', '점수']]는 이름과 점수 열의 데이터를 반환합니다.

5. 인덱스 설정과 재설정

Pandas에서 인덱스를 특정 열로 설정하거나, 인덱스를 기본 정수 인덱스로 재설정할 수 있습니다.

# '이름'을 인덱스로 설정
df_with_index = df.set_index('이름')
display(df_with_index)

# 인덱스를 다시 기본 정수 인덱스로 설정
df_reset = df_with_index.reset_index()
display(df_reset)
나이 점수
이름
Alice 25 85
Bob 32 88
Charlie 23 91
David 35 79
Eva 29 95
이름 나이 점수
0 Alice 25 85
1 Bob 32 88
2 Charlie 23 91
3 David 35 79
4 Eva 29 95

set_index() 메서드는 특정 열을 인덱스로 설정하며, reset_index()는 인덱스를 기본 정수 인덱스로 재설정합니다.

Date Title Author
Jan 1, 3000 전체 카테고리 gabriel yang
Oct 3, 2024 Pandas에서 Column 추가 및 삭제하는 방법 gabriel yang
Oct 3, 2024 Pandas 데이터프레임 mongodb에 저장하기 gabriel yang
Sep 21, 2024 Pandas에서 결측치(NaN) 처리하기 gabriel yang
Sep 11, 2024 Pandas SQL 쿼리 이용하기 gabriel yang
Aug 29, 2024 Pandas에서 데이터 형식 변경하기 gabriel yang
Aug 29, 2024 Pandas에서 데이터를 정렬하는 방법 gabriel yang
Aug 27, 2024 Pandas SQL 데이터베이스 읽어오기 gabriel yang
Aug 26, 2024 Pandas groupby 사용방법 gabriel yang
Aug 26, 2024 Pandas에서 두 개의 데이터프레임을 연결하기 gabriel yang
Aug 24, 2024 Pandas에서 melt를 사용해야 하는 데이터 유형과 사용 방법 gabriel yang
Aug 24, 2024 Pandas에서 pivot_table 사용하기 gabriel yang
Aug 24, 2024 Pandas에서 reset_index를 사용해야 하는 이유 gabriel yang
Aug 22, 2024 Pandas Excel과 CSV 파일을 읽어오는 방법 gabriel yang
Aug 19, 2024 Pandas DataFrame의 컬럼 이름 변경하기 gabriel yang
Aug 17, 2024 Pandas SettingWithCopyWarning 문제 해결 gabriel yang
Nov 30, 2023 Dataframe을 Dict로 생성 및 변환 gabriel yang
Nov 29, 2023 python datetime 사용법 정리 gabriel yang
Sep 14, 2023 Pandas 중복 데이터 제거하기 gabriel yang
No matching items
Back to BLOG LIST