pandas에서 사용되는 대표적인 데이터 오브젝트
- 시리즈(Series) : 1차원 배열 / 인덱스라는 한 가지 기준에 의하여 데이터가 저장된다. (행)
- 데이터프레임(DaraFrame) : 2차원 배열 / 인덱스와 컬럼 두 가지 기준에 의하여 표 형태로 데이터가 저장된다. (행열)
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 데이터 저장 및 불러오기
# pd.read_excel('파일경로/파일명.확장자')
# pd.read_csv('파일경로/파일명.확장자')
# 엑셀 불러오기
pd.read_excel('./파일명.xlsx') # ./ ==> 현재 내가 있는 위치라는 의미
# csv 파일 불러오기
pd.read_csv('./파일명.csv')
import pandas as pd
# UTF-8 인코딩으로 파일 불러오기
data = pd.read_csv('file.csv', encoding='utf-8')
# ASCII 인코딩으로 파일 불러오기
data = pd.read_csv('file.csv', encoding='ascii')
파일이 깨져서 불러와질때 인코딩 방법을 달리해서 불러온다. (utf-8 euc-kr 등)
Seaborn 이라는 라이브러리에서 불러올 수 있는 내장 데이터셋
(iris, tips, titanic, flights, planets 데이터셋)
import pandas as pd
import seaborn as sns
data = sns.load_dataset('tips')
tips 라는 이름을 가진 데이터를 불러오는 코드 - 데이터프레임 형태의 데이터셋을 가져온다.
data.to_csv("tips_data.csv")
data.to_csv("tips_data.csv", index=False)
data.to_csv 라는 메서드를 활용하여 현재위치에 tips_data.csv 라는 파일명을 가진 파일을 만들거라는 코드
앞서 언급한 data 라는 파일에 파일명이 tips_data.csv 이고 csv 파일로 저장할거다. 라는 뜻이다.
즉, 데이터 전처리가 끝난 데이터를 파일화 시키는 것이다.
## 인덱스를 표시하지 않기 위해 index=False 를 추가하여 저장하기 / 인덱스 기본값은 True 이다. ##
df = pd.read_csv("tips_data.csv")
파일화 시킨 tips_data.csv 파일을 다시 불러오는 코드이다.
df = pd.read_csv("tips_data.csv", index_col=0)
저장할때 index=False 를 설정하지 않았을시, 불러올때에 인덱스를 제거하는 코드이다. index_col=0 을 추가한다.
df.to_csv("temp/tips_data.csv", index=False)
temp 라는 파일에 해당 파일을 저장하겠다는 코드이다.
df.to_excel("temp/tips_data.xlsx", index=False)
엑셀 파일로 저장하는 코드이다.
# 경로를 지정해서 파일을 저장하는 방법
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 인덱스
df = pd.DataFrame({
'A': [1,2,3],
'B': ['a', 'b', 'c']
}, index=['idx3', 'idx2', 'idx1'])
어떤 데이터프레임의 인덱스를 설정할때에 인덱스의 기본값은 0,1,2,... 로 설정되어 있고,
각 인덱스를 특정지어 줄때에 해당 데이터프레임 뒤에 따로 인덱스 이름을 지정해준다.
df.loc['idx2']
idx2 로 지어진 인덱스의 행의 데이터를 가져와라는 코드이다.
df.sort_index()
인덱스의 순서를 정리해서 데이터프레임을 정렬하는 코드이다.
df.set_index('A')
A라는 컬럼으로 인덱스를 사용하겠다는 코드이다. 즉 A의 요소가 인덱스로 된다.
df.index
인덱스의 값이 어떻게 구성되어 있고, 타입은 무엇인지를 알려주는 코드이다.
df.index = ['1', '2', '3']
인덱스를 변경하는 코드이다.
df.reset_index()
인덱스의 기본값을 추가해주는 코드이다.
df.reset_index(drop=True)
앞서 언급한 모든 인덱스를 제거하고 인덱스를 기본값(0,1,2,...)으로 설정하는 코드이다.
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 컬럼
data = {
'name' : ['Alice', 'Bob', 'Charlie'],
'age' : [25, 30, 35],
'gender' : ['female', 'male', 'male']
}
df = pd.DataFrame(data)
위의 데이터프레임을 활용한다.
df['age']
age 라는 컬럼의 값들을 가져온다.
df.columns
현재 컬럼의 이름이 어떻게 구성되었는지, 타입은 무엇인지 확인한다.
df.columns = ['이름', '나이', '성별']
컬럼명을 변경한다.
df.rename(columns={'이름': 'name', '나이': 'age', '성별': '남/여'})
컬럼명인 key 값을 value 값으로 바꾸는 코드이다. 딕셔너리를 사용한다.
df['스포츠'] = '축구'
스포츠라는 컬럼에 축구라는 값으로 전부 추가한다.
del df['스포츠']
스포츠라는 컬럼을 삭제한다.
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 데이터 확인 - 다양한 메서드를 활용 >>> .head() .info() .describe()
df = pd.read_csv("temp/tips_data.csv")
먼저 어떠한 데이터프레임을 불러온 뒤에
df.head()
기본값으로 5개의 행에 대한 정보(인덱스 0~4)를 가져오고, 괄호 안에 숫자를 지정해서 원하는 갯수의 행을 불러온다.
df.info()
데이터프레임에 대한 정보를 확인한다.
데이터 타입 / 컬럼에 대한 null 값이 몇 개가 있는지 등
df.describe()
count 값이 몇개인지 / mean 평균 / std 표준편차 / 최대 최소 4분위 값에 대한 메소드
숫자 타입을 가진 컬럼 값들만 확인 가능하다.
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 결측치 확인
df = pd.DataFrame({
'A': [1,2,3,4],
'B': [5,6,7,None]
})
위의 데이터프레임을 불러온 뒤에
df.info()
먼저 info를 통해 Non-Null Count 를 통해서 어떤 컬럼에 null 값이 있는지 확인할 수 있다.
df.isna()
True 값이 null 값이다.
df['B'].isna()
B 컬럼에 대한 값도 확인 가능하다.
df[df['B'].isna()]
데이터프레임 안에서 True인 값만 불러와라는 df 함수를 통해서 특정 컬럼의 null 값인 것만 확인할 수 있다.
# 결측치 확인 : isnull()
df.isnull().sum() # 이렇게하면 결측치가 몇개있는지도 알 수 있다
# 결측치 제거 : dropna()
df.dropna()
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 중복 데이터
# 중복 데이터 확인
df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3'])
# 중복 데이터 제거
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 데이터 이상치
# IQR 계산
Q1 = df['컬럼1'].quantile(0.25)
Q3 = df['컬럼1'].quantile(0.75)
IQR = Q3 - Q1
# 이상치 기준 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 이상치 제거
df[(df['컬럼1'] >= lower_bound) & (df['컬럼1'] <= upper_bound)]
--------------------------------------------------------------------------------------------------------------------------------------------------------
# 데이터 타입
df = pd.read_csv("temp/tips_data.csv")
위의 데이터프레임을 불러온 뒤에
df.info()
위 코드를 통해서 데이터 타입을 확인할 수 있다.
df['total_bill'].dtype
각 컬럼별로 데이터 타입을 확인할 수 있다.
df['total_bill'] = df['total_bill'].astype(str)
위 코드를 통해 원래 float 에서 object 로 타입을 변경할 수 있다. 할당을 해준 것.
df['total_bill'].astype(float) .astype(int)
다시 float으로 변경하고, int 값으로 변경하면 정수로 변한다. 타입이 맞지 않으므로 바로 int로 바꿀 수 없기 때문이다.
# 데이터 타입 추가 자료
# 데이터 타입 변경을 원한다면 !
df['column_name'].astype(int)
df['column_name'].astype(float)
df['column_name'].astype(str)
df['column_name'].astype(bool)
df['column_name'].astype('category')
df['column_name'].astype('datetime64[ns]')
df['column_name'].astype(complex)
df['column_name'].astype(object)
'전처리 및 시각화' 카테고리의 다른 글
데이터 시각화(matplotlib) (0) | 2024.07.25 |
---|---|
데이터 전처리(데이터 선택(.iloc .loc)/slicing/boolean indexing/데이터 병합(concat / merge)/데이터 집계(groupby/pivot table)/데이터 정렬) (1) | 2024.07.23 |