데이터 불러오기 / 저장하기
인덱스
데이터프레임 또는 시리즈의 각 행 또는 각 요소에 대한 식별자
- DataFrame 자료구조에도 인덱스를 설정할 수 있음
- 0부터 시작하는 숫자 뿐아니라 임의로 문자로 적용할 수 있음
- 아예 처음부터 파일 불러올때 , 인덱스를 지정하는 것도 가능
# 사용자가 직접 인덱스를 설정한 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3'])
컬럼
- 데이터프레임의 열을 나타냄
- 데이터프레임은 행과 열로 구성되며, 각 열은 서로 다른 종류의 데이터를 담고 있음
- 데이터프레임의 세로 방향에 있는 데이터들을 컬럼이라고 부름
# 데이터프레임 생성
data = {
'이름': ['Alice', 'Bob', 'Charlie'],
'나이': [25, 30, 35],
'성별': ['여', '남', '남']
}
df = pd.DataFrame(data)
# 각 컬럼 출력
print(df['이름']) # '이름' 컬럼 출력
print(df['나이']) # '나이' 컬럼 출력
print(df['성별']) # '성별' 컬럼 출력
컬럼명 변경하기
pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])
데이터 확인하기
데이터 확인
.head()
> 데이터를 N개 행까지 보여줌
data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌
.info()
> 데이터의 정보를 파악
data.info()
# null 값을 확인할때도 활용
.describe()
> 데이터의 기초통계량을 확인(개수, 평균, 표준편차, 사분위, 중앙값)
data.describe()
결측치 제거하는 방법
# 결측치 확인 : isnull()
df.isnull().sum() # 이렇게하면 결측치가 몇개있는지도 알 수 있어요 !
# 결측치 제거 : dropna()
df.dropna()
중복 데이터 제거하는 방법
# 중복 데이터 확인
df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3'])
# 중복 데이터 제거
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])
데이터타입 변경하기
DataFrame['column_name'] = DataFrame['column_name'].astype(new_dtype)
- DataFrame['column_name']: 열을 선택하는 방식으로 열의 데이터 타입을 변경하고자 하는 열을 지정
- new_dtype: 변경하고자 하는 새로운 데이터 타입을 명시 ('int', 'float', 'str' 등)
데이터 선택
.iloc (정수 기반의 인덱스 사용)
data.iloc[0,2]
#행과 열 번호를 통해 특정 데이터를 선택할 수 있음
.loc(레이블 기반의 인덱스 사용)
data.loc['행이름' , '컬럼명']
# 행이름과 컬럼명을 통해서도 특정 데이터를 선택할 수 있음
Boolean indexing이란?
- 조건을 이용하여 데이터프레임에서 특정 조건을 만족하는 행을 선택하는 방법
- 데이터를 필터링하거나 원하는 조건을 만족하는 행을 추출할 수 있음
- 주로 불리언(Boolean) 값을 가지는 조건식을 사용하여 데이터프레임을 인덱싱하는 방법
1) 단일 조건으로 필터링
# 'age' 열에서 30세 이상인 행 필터링
df[df['age'] >= 30]
2) 여러 조건으로 필터링
# 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링
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()메소드란?
Series나 DataFrame의 값들 중에서 특정 값이나 리스트 안에 포함된 값들을 찾아내는 메소드
원하는 조건에 해당하는 데이터를 빠르게 필터링하거나 선택할 수 있음
데이터 병합
concat()
데이터프레임을 위아래나 좌우로 연결할 수 있음
# 두 개의 데이터프레임 생성
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)
결과

merge()
- left와 right: 병합할 데이터프레임 중 병합되는 기준이 되는 왼쪽과 오른쪽 데이터프레임
- how: 병합 방법을 나타내는 매개변수로, 'inner', 'outer', 'left', 'right' 등의 옵션이 있습니다.
- inner: 공통된 키(열)를 기준으로 교집합을 만듦
- outer: 공통된 키를 기준으로 합집합을 만듦
- left: 왼쪽 데이터프레임의 모든 행을 포함하고 오른쪽 데이터프레임은 공통된 키에 해당하는 행만 포함
- right: 오른쪽 데이터프레임의 모든 행을 포함하고 왼쪽 데이터프레임은 공통된 키에 해당하는 행만 포함
- on: 병합 기준이 되는 열 이름(혹은 열 이름의 리스트)을 지정합
- left_on과 right_on: 왼쪽 데이터프레임과 오른쪽 데이터프레임에서 병합할 열 이름이 다른 경우에 사용

데이터 집계
groupby()
데이터프레임을 그룹화하고, 그룹 단위로 데이터를 분할, 적용, 결합하는 기능을 제공
# 샘플 데이터프레임 생성
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()
pivot table()
데이터프레임에서 피벗 테이블을 생성하는 데 사용
주어진 데이터를 사용자가 원하는 형태로 재배치하여 요약된 정보를 보기 쉽게 제공
# 샘플 데이터프레임 생성
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)
결과

데이터 정렬하기
sort_values() : 컬럼 기준
# 샘플 데이터프레임 생성
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)
sort_index() : 인덱스 기준
# 샘플 데이터프레임 생성
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_index = df.sort_index() # 인덱스를 기준으로 오름차순 정렬
sorted_by_index = df.sort_index(ascending=False) # 인덱스를 기준으로 내림차순 정렬
print(sorted_by_index)'TIL' 카테고리의 다른 글
| [1/7] TIL - SQL (1주차) (0) | 2025.01.07 |
|---|---|
| [1/3] TIL - 데이터 전처리 & 시각화 (4주차) (0) | 2025.01.03 |
| [12/31] TIL - 데이터 전처리 & 시각화 (1,2주차) (2) | 2024.12.31 |
| [12/30] TIL (데이터 리터러시) (2) | 2024.12.30 |
| [12/27] TIL (파이썬 종합반 5주차) (1) | 2024.12.27 |