데이터의 목적? =
설득
데이터 전처리를 해야하는 이유?
데이터 전처리를 할 때는 꼭 방향성을 가지고 할 것!
데이터를 통해 무엇을 확인할 것인가?
어떤 의사결정을 위해 데이터가 필요한 것인가?
데이터를 통해 달성할 목적을 정하고 목적을 위한 데이터 전처리를 하자 !
Excel
vsPandas
Pandas는 대규모 데이터셋 및 복잡한 작업을 처리하는 데 효과적,
자동화와 프로그래밍 기능을 통해 더 많은 유연성과 확장성을 제공
엑셀은 상대적으로 작은 규모의 데이터나 간단한 작업에 유용,
비전문가가 쉽게 사용할 수 있는 직관적인 인터페이스를 제공
- index : 각 아이템을 특정할 수 있는 고유의 값 (엑셀의 좌측 열 순서)
- Series = 하나의 속성을 가진 데이터 집합 (= DataFrame 표에서 1줄의 열)
- = value + index
- DataFrame = 표 형태
- columns : 하나의 속성을 가진 데이터 집합 (열)
- row : 인덱스에 포함되는 데이터 집합 (행)
import
명령어를 통해 Pandas 라이브러리를 불러오기import pandas as pd
# pandas 라이브러리를 불러올 것이며, 이제부터 pandas를 pd 로 별칭 부여
# 설치 : !pip install pandas #판다스 미설치 시 오류 발생
데이터 불러오기
엑셀 / CSV 파일 ; 데이터 불러오기
# pd.read_excel('파일경로/파일명.확장자')
# 엑셀 불러오기
# ./ ==> 현재 내가 있는 위치라는 의미
pd.read_excel('./파일명.xlsx')
# csv 파일 불러오기
pd.read_csv('./파일명.xlsx')
파일이 깨져서 불러와질 때!
Pandas에서 파일을 불러올 때 파일의 텍스트 데이터를 읽어오는 과정에서
파일의 인코딩 방식을 정확히 지정해야 올바르게 데이터를 읽어올 수 있음
- 모두가 하나의 인코딩을 사용하면 괜찮지만,
한글만 하더라도 대표적으로 Microsoft사에서 만든cp949
/ms949
인코딩,
euc-kr
인코딩,utf-8
인코딩 등 수많은 인코딩이 존재- 즉, 모든 인코딩이 동일하지 않기 때문에 만약 파일이
cp949
로 인코딩 되어 있을 때
이 파일을utf-8
인코딩 방식으로 읽어오면, 잘못된 Byte 변환으로 깨짐 현상 발생import pandas as pd # UTF-8 인코딩으로 파일 불러오기 data = pd.read_csv('file.csv', encoding='utf-8') # ASCII 인코딩으로 파일 불러오기 data = pd.read_csv('file.csv', encoding='ascii')
데이터 저장하기
- pd.to_csv(’파일경로/파일명.확장자’ , index = False)
- pd.to_excel(’파일경로/파일명.확장자’ , index = False)
df = 데이터프레임 # 저장하고 싶은 데이터
df.to_csv('./newfile.csv', index = False)
엑셀파일(xlsx) 읽기나 저장 실행 시 오류 :
No module named 'openpyxl'
엑셀파일을 읽는 openpyxl 모듈의 미설치로 오류 발생
해결방법 :
pip install openpyxl
후 재실행
데이터프레임(DataFrame) 또는 시리즈(Series)의 각 행 또는 각 요소에 대한 식별자
# Pandas에서 사용자가 직접 설정한 인덱스를 변경하는 예시
import pandas as pd
# 사용자가 직접 인덱스를 설정한 데이터프레임 생성
df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3'])
# 인덱스 변경 (대체)
df.index = ['new_idx1', 'new_idx2', 'new_idx3']
print(df)
.
import pandas as pd # 기본 정수 인덱스를 가진 데이터프레임 생성 df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}) df
# 사용자가 직접 인덱스를 설정한 데이터프레임 생성 df = pd.DataFrame({'A': [1, 2, 3], 'B': ['a', 'b', 'c']}, index=['idx1', 'idx2', 'idx3']) df
# 특정 인덱스의 행에 접근 row = df.loc['idx2'] row
# 인덱스를 기준으로 데이터프레임 정렬 sorted_df = df.sort_index() sorted_df
set_index()
# df가 가지고 있는 특정 컬럼명을 기준으로 인덱스를 설정하기 data = df.set_index('컬럼명') data.head()
index_col
# 불러올때 인덱스 지정하기 pd.read_csv('./data/file.csv' , index_col = '컬럼정보') pd.read_csv('./data/file.csv' , index_col = 0) # 0부터 시작
data.index
#인덱스 확인하기 data.index
#리스트 형태를 활용해서 인덱스를 새로 입력할 수 있음 data.index = ['1번' , '2번' , '3번'] data
reset_index()
# reset_index() 의 기본 값은 drop = False 를 가지고 있음 data.reset_index()
# 현재 인덱스를 컬럼으로 변경할 수 있음 # reset_index(drop = True) 명령어를 활용하면, # 현재 인덱스 값을 컬럼으로 변경하지 않고 인덱스를 초기화할 수 있음 data.reset_index(drop=True)
데이터프레임(DataFrame)의 열(또는 변수)
.
import pandas as pd # 데이터프레임 생성 data = { '이름': ['Alice', 'Bob', 'Charlie'], '나이': [25, 30, 35], '성별': ['여', '남', '남'] } df = pd.DataFrame(data) # 각 컬럼 출력 print(df['이름']) # '이름' 컬럼 출력 print(df['나이']) # '나이' 컬럼 출력 print(df['성별']) # '성별' 컬럼 출력
names = [’컬럼명1’ , ‘컬럼명2’ , … , ‘컬럼명 19’]
pd.read_csv('./data/file.csv' , names = [’컬럼명1’, ‘컬럼명2’, … ,‘컬럼명 19’])
데이터프레임.column
#컬럼 확인하기 data.column #리스트 형태를 활용해서 컬럼명을 새롭게 입력할 수 있습니다. data.column = ['축구', '농구', '배구', '야구'] data