3. 데이터 선택
● .iloc[로우, 컬럼] : 인덱스 번호로 선택하기
- 행번호(로우)와 열번호(컬럼)을 통해 특정 행과 열 데이터를 선택할 수 있음.
import pandas as pd
# 샘플 데이터프레임 생성
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)
# iloc을 사용하여 특정 행과 열 선택
selected_data = df.iloc[1:4, 0:2] # 인덱스 1부터 3까지의 행과 0부터 1까지의 열 선택
print(selected_data)
A B C A B
0 1 10 100
1 2 20 200 1 2 20
2 3 30 300 -- > 2 3 30
3 4 40 400 3 4 40
4 5 50 500 4 5 50
● .loc[로우,컬럼] : 이름으로 선택하기
- 인덱스가 번호가 아니고 특정 문자일 경우
import pandas as pd
# 샘플 데이터프레임 생성
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
# loc을 사용하여 특정 행과 열 선택
selected_data = df.loc['b':'d', 'A':'B'] # 레이블 'b'부터 'd'까지의 행과 'A'부터 'B'까지의 열 선택
print(selected_data)
파이썬 슬라이싱과 다르게, loc에서는 end index를 포함하여 가져옴.
● 데이터 프레임 슬라이싱
data[ ['컬럼명1', '컬럼명2', '컬럼명3'] ]
리스트로 컬럼명을 묶어서 사용 가능, 컬럼명 순서를 바꿀 수도 있다.
● 두 개 이상의 셀을 선택할 경우
# 2개 컬럼명을 선택할 경우
data.loc[ '행이름' , ['컬럼명1' , '컬럼명2'] ]
# 2개 행이름을 선택할 경우
data.loc[ ['행이름1', '행이름2'] , '컬럼명1' ]
# 리스트 슬라이싱 : 을 활용해서 특정 범위를 지정하여 선택할 수 있습니다.
data.loc[ '행이름' , '컬럼명1' : ] # '컬럼명1' : ==> 컬럼명1부터 끝까지라는 의미
4. 불리언 인덱싱
- 조건을 이용하여 데이터프레임에서 특정 조건을 만족하는 행을 선택하는 방법
- 데이터를 필터링하거나 원하는 조건을 만족하는 행을 추출할 수 있음.
- 주로 불리언 값을 가지는 조건식을 사용하여 데이터프레임을 인덱싱하는 방법
1) 단일 조건으로 필터링
# 'age' 열에서 30세 이상인 행 필터링
df[df['age'] >= 30]
2) 여러 조건으로 필터링
# 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링
df[(df['age'] >= 30) & (df['gender'] == 'Male')]
& 혹은 and 둘 다 사용 가능
df[(df['age'] >= 30) \
& (df['gender'] == 'Male')] 과 같이 줄바꿈 (\)을 이용해서 가독성을 높일 수도 있음.
3) 조건에 따른 특정 컬럼 필터링
# 'age' 열에서 30세 이상인 경우의 'name' 열만 선택
df.loc[df['age'] >= 30, 'name']
4) isin()을 활용한 필터링
# 'gender' 열에서 'Male' 또는 'Female'인 행 필터링
df[df['gender'].isin(['Male', 'Female'])]
isin() 메소드 - 시리즈나 데이터프레임의 값들 중에서 특정 값이나 리스트 안에 포함된 값들을 찾아내는 메소드
5. 데이터 병합
1) concat 함수
데이터를 위아래 / 좌우로 연결할 수 있음.
import pandas as pd
# 두 개의 데이터프레임 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5']})
# 위아래로 데이터프레임 연결
result_vertical = pd.concat([df1, df2], axis=0)
# 좌우로 데이터프레임 연결
result_horizontal = pd.concat([df1, df2], axis=1)
print("위아래 연결 결과:\n", result_vertical)
print("\n좌우 연결 결과:\n", result_horizontal)
위아래로 연결 --> axis = 0
좌우로 연결 --> axis = 1
ignore_index : 기본값은 False, 연결된 결과 데이터프레임의 인덱스를 유지함. True로 설정하면 기존 인덱스를 무시하고 새롭게 인덱스 설정
reset_index : 위와 같음.
df = pd.concat([df1,df2,df3], axis = 1).reset_index(drop = True)
이와 같이 사용
2) merge 함수
sql 의 join이라고 생각하면 편함.
주로 두 개 이상의 데이터프레임에서 공통된 열이나 인덱스를 기준으로 데이터를 병합할 때 사용
import pandas as pd
# 두 개의 데이터프레임 생성
left_df = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
right_df = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})
# 'key' 열을 기준으로 두 데이터프레임 병합
merged_df = pd.merge(left_df, right_df, on='key', how='inner')
print(merged_df)
how에는 inner, outer, left, right가 들어갈 수 있음.
on 은 기준 컬럼
6. 데이터 집계
1) Group by()
데이터프레임을 그룹화하고, 그룹 단위로 데이터를 분할(split), 적용(apply), 결합(combine)하는 기능을 제공.
데이터프레임을 특정 기준에 따라 그룹으로 나누어 집계, 변환, 필터링 등을 할 수 있다.
import pandas as pd
# 샘플 데이터프레임 생성
data = { 'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Value': [1, 2, 3, 4, 5, 6] }
df = pd.DataFrame(data)
# 'Category' 열을 기준으로 그룹화하여 'Value'의 연산 수행
grouped = df.groupby('Category').mean()
grouped_sum = df.groupby('Category').sum()
grouped_count = df.groupby('Category').count()
grouped_max = df.groupby('Category').max()
grouped_min = df.groupby('Category').min()
# 수치형 데이터의 경우에 연산이 가능
category 컬럼을 기준으로 그룹화 한 것
grouped_multiple = df.groupby(['Category', 'SubCategory']).sum()
기준 열은 여러 개 선택 가능
복수의 열을 기준으로 그룹화하여 데이터프레임을 조작하는 경우, 복수의 열을 리스트로 전달한다.
grouped_multiple = df.groupby(['Category', 'SubCategory']).agg({'Value1': ['mean', 'sum'], 'Value2': 'sum'})
agg() 함수를 사용하여 여러 열에 대해 다양한 집계 함수를 적용할 수 있음.
2) Pivot table
데이터프레임에서 피벗 테이블을 생성하는 데 사용됨.
import pandas as pd
# 샘플 데이터프레임 생성
data = { 'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],
'Category': ['A', 'B', 'A', 'B', 'A'],
'Value': [10, 20, 30, 40, 50] }
df = pd.DataFrame(data)
# 피벗 테이블 생성: 날짜를 행 인덱스로, 카테고리를 열 인덱스로, 값은 'Value'의 합으로 집계
pivot = df.pivot_table(index='Date', columns='Category', values='Value', aggfunc='sum')
print(pivot)
aggfunc으로 원하는 집계 함수 사용 가능
pivot = df.pivot_table(index='Date', columns='Category', values=['Value1', 'Value2'], aggfunc={'Value1': 'mean', 'Value2': 'sum'})
집계 함수를 다르게 적용할 수도 있음.
7. 데이터 정렬하기
sort_values() 함수를 사용하여 정렬할 수 있다.
import pandas as pd
# 샘플 데이터프레임 생성
data = { 'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 22, 30, 18, 27],
'Score': [85, 90, 75, 80, 95] }
df = pd.DataFrame(data)
# 정렬
sorted_by_score = df.sort_values('Score') # 'Score' 열을 기준으로 오름차순 정렬
sorted_by_score = df.sort_values('Score',ascending=False) # 'Score' 열을 기준으로 내림차순 정렬
print(sorted_by_score)
기본 값은 오름차순 정렬이고, ascending = False를 사용하여 내림차순 정렬도 가능.
sorted_by_index = df.sort_index() # 인덱스를 기준으로 오름차순 정렬
sorted_by_index = df.sort_index(
ascending=False) # 인덱스를 기준으로 내림차순 정렬
인덱스를 기준으로 정렬할 수도 있다.
정렬값에 각각 오름차순, 내림차순을 부여할 수도 있음.
'TIL > 전처리, 시각화' 카테고리의 다른 글
전처리 <그룹 내 데이터 최빈값으로 대체하기> (0) | 2024.07.28 |
---|---|
데이터 전처리 <IQR 이상치 제거> (1) | 2024.07.26 |
데이터 시각화1 (1) | 2024.07.22 |
데이터 전처리1 (0) | 2024.07.18 |