반응형
필자가 전처리하다가 함수 몰라서 구글링 했으면 여기에 추가함
DataFrame 입출력
# CSV 파일 읽기
df = pd.read_csv('file.csv')
# Excel 파일 읽기
df = pd.read_excel('file.xlsx')
# CSV 파일로 저장
df.to_csv('output.csv', index=False) # index를 False로 설정하여 인덱스를 저장하지 않음
# Excel 파일로 저장
df.to_excel('example.xlsx', index=False) # index=False를 설정하여 인덱스를 저장하지 않습니다.
열 순서 바꾸기
# 예제 DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']}
df = pd.DataFrame(data)
# 새로운 열 순서를 지정
new_columns_order = ['City', 'Age', 'Name']
# 열 순서를 변경
df_reordered = df[new_columns_order]
열 이름 바꾸기 rename()
# 예제 DataFrame 생성
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']}
df = pd.DataFrame(data)
# 열 이름을 바꾸기 위한 매핑 딕셔너리 생성
# 매핑 형태는 {"바꾸기 전 이름" : "바꿀 이름"}
column_name_mapping = {'Name': 'Full Name', 'Age': 'Years Old', 'City': 'Residence'}
# 열 이름 바꾸기
df_renamed = df.rename(columns=column_name_mapping)
데이터 타입 바꾸기 (astype)
# 데이터 프레임 전체를 정수형으로 변경
df = df.astype(int)
# 열 'C'의 데이터 타입을 정수형으로 변경
df['C'] = df['C'].astype(int)
Index 관리
# '행이름' 열을 인덱스로 설정
df.set_index('행이름', inplace=True)
# 인덱스 초기화
df.reset_index(inplace=True)
# 인덱스 재설정: 기존 인덱스를 새로운 열로 추가하지 않음
# drop = False : 기존 인덱스를 새로운 열로 추가
df.reset_index(drop=True, inplace=True)
데이터 합치기 (merge(), join(), concat())
merge(): 두 DataFrame의 열을 기준으로 결합
join(): 두 DataFrame의 인덱스를 기준으로 결합
concat() : 두 DataFrame을 수평, 수직으로 결합 (행 합치기)
merge()
※ 주의 : 기준열(on 파라미터값)이외의 열 이름이 같을 경우 오류가 발생할 수 있음
# 예제 데이터 생성
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
'value': [5, 6, 7, 8]})
# merge를 사용하여 두 DataFrame 합치기
# key: 결합할 때 사용할 기준열
# how: merge 방식 [inner(교집합), outer(합집합), left(df1/왼쪽), right(df2/오른쪽)]
merged_df = pd.merge(df1, df2, on='key', how='inner')
join()
# 예제 데이터 생성
df1 = pd.DataFrame({'value1': [1, 2, 3, 4]}, index=['A', 'B', 'C', 'D'])
df2 = pd.DataFrame({'value2': [5, 6, 7, 8]}, index=['B', 'D', 'E', 'F'])
# join을 사용하여 두 DataFrame 합치기
joined_df = df1.join(df2, how='inner')
concat() 수평으로 결합 (열 추가)
# 예제 DataFrame 생성
data1 = {'A': [1, 2, 3],
'B': ['a', 'b', 'c']}
data2 = {'C': [4, 5, 6],
'D': ['d', 'e', 'f']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# concat() 함수를 사용하여 DataFrame 수평 결합
concatenated_df = pd.concat([df1, df2], axis=1)
concat() 수직으로 결합 (행 추가)
# 예제 DataFrame 생성
data1 = {'A': [1, 2, 3],
'B': ['a', 'b', 'c']}
data2 = {'C': [4, 5, 6],
'D': ['d', 'e', 'f']}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# concat() 함수를 사용하여 DataFrame 수평 결합
concatenated_df = pd.concat([df1, df2], axis=0)
행 중복제거 (drop_duplicates)
# 중복된 행 제거
df_no_duplicates = df.drop_duplicates()
특정 데이터만 선택하기
특정 열의 데이터 값의 크기를 비교하여 특정 값만 뽑는 방법
# 예제 DataFrame 생성
data = {'행이름': ['A', 'B', 'C', 'D', 'E'],
'값': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# '값' 열의 값이 20과 40 사이인 행 선택
# between() 사용
df_filtered = df[df['값'].between(20, 40)]
# 연산자 사용
df_filtered = df[(df['값'] > 20) & (df['값'] < 40 )]
데이터 그룹화 groupby()
특정 열의 데이터 값의 크기를 비교하여 특정 값만 뽑는 방법
# 예제 데이터 생성
data = {'학과': ['컴퓨터공학', '경영학', '컴퓨터공학', '경영학', '컴퓨터공학'],
'학년': [3, 2, 4, 3, 2],
'성적': [85, 90, 88, 75, 92]}
df = pd.DataFrame(data)
# '학과'와 '학년'을 기준으로 데이터 그룹화
grouped = df.groupby(['학과', '학년'])
# 각 그룹에 대한 평균 성적 계산
average_score = grouped['성적'].mean()
# 그룹화된 데이터프레임의 인덱스 초기화
# 초기화 안해주면 형태가 이상하게 나옴
average_score = average_score.reset_index()
가변수화 get_dummies()
# 예제 DataFrame 생성
data = {'행이름': ['A', 'B', 'C', 'A', 'B'],
'값': [1, 2, 3, 4, 5]}
df1 = pd.DataFrame(data)
# 더미 변수화
df = pd.get_dummies(df1, columns=["행이름"], drop_first=True, dtype=int)
get_dummies()의 함수 파라미터들
파라미터 | 설명 |
---|---|
data | 변환할 DataFrame |
columns | 더미 변수로 변환할 열(들)의 이름 또는 인덱스 |
prefix | 더미 변수의 열 이름에 추가할 접두사 |
prefix_sep | 더미 변수의 열 이름과 접두사 사이에 추가할 구분자 |
drop_first | 첫 번째 더미 변수를 삭제할지 여부 |
dtype | 생성된 더미 변수의 데이터 타입 |
dummy_na | NaN(결측치)을 더미 변수로 처리할지 여부 |
수치형 데이터를 범주형 데이터로 바꾸기 (구간 나누어 레이블 할당) cut()
# 예제 DataFrame 생성
data = {'행이름': [1, 3, 5, 7, 9]}
df = pd.DataFrame(data)
# pd.cut() 함수를 사용하여 데이터를 구간별로 나누고 레이블을 할당
df["구간"] = pd.cut(df["행이름"], bins=[-np.inf, 3, 6, np.inf], labels=["레이블1", "레이블2", "레이블3"])
반응형
'AI > 데이터 전처리' 카테고리의 다른 글
5. 데이터 전처리의 모든 것 : 결측치 처리 (확인, 제거, 대체) (1) | 2024.04.18 |
---|---|
5. 데이터 전처리의 모든 것 : DataFrame 파일 입출력 (1) | 2024.04.18 |
1. CRISP으로 둘러보는 데이터 분석 (0) | 2024.04.17 |