[참고]
pd.read_데이터 확장자 타입("파일경로/파일명.확장자")
엑셀 파일: pd.read_excel("파일경로/파일명.확장자")
csv 파일: pd.read_csv("파일경로/파일명.확장자")
데이터프레임 명_.to_csv("파일경로/파일명.확장자", index=bool)
: 각 행이나 요소에 대한 식별자.
<특징>
: 0으로 시작하는 정수 인덱스 제공(DF 생성 시 자동으로 부여되는 index)
df = pd.DataFrame({'A': [1, 2, 3],
'B': ['a', 'b', 'c']})
; index와 columns의 이름을 따로 지정하지 않는 경우
: 사용자가 직접 인덱스를 지정
df = pd.DataFrame({'A': [1, 2, 3],
'B': ['a', 'b', 'c']},
index=['idx1', 'idx2', 'idx3'])
; 인덱스를 따로 지정하는 경우
df.set_index(인덱스로 놓을 컬럼값, drop=bool, append=bool, inplace=bool)
CODE | 설명 |
---|---|
drop | 인덱스로 설정한 열의 기존 값을 삭제할 것인가 |
append | 기존 인덱스에 새 인덱스를 집어넣을 것인가 |
inplace | 이 결과를 최초 DF에 덮어씌울 것인가 |
df.set_index(인덱스로 놓을 컬럼값1, 컬럼값2,...)
data.reset_index(drop=True)
#인덱스 확인
df.index #결과: RangeIndex(Start=0, Stop=4, Step1)
# 새로운 인덱스 입력
df.index=['1번','2번','3번']
df.reindex(index=배열, columns=배열, fill_value=값)
df1.reindex(columns=df2.columns)
df.rename(index={old:new}, columns={old:new})
: 각 컬럼은 series 객체를 뜻하기도 함. 열의 데이터에 접근하고 조작할 수 있는 인터페이스를 제공.
df['컬럼 이름']
pd.read_csv('파일경로/파일명.확장자', name==['컬럼1','컬럼2',...,컬럼n])
data.column = ['축구', '농구', '배구', '야구']
: 데이터를 N개 행까지 출력. ()안에 정수를 입력하고 출력하면 정수 갯수만큼 데이터값을 보여줌.
data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌
: 인덱스, 컬럼명, 컬럼의 데이터 갯수, Null 값, 데이터 타입 등 데이터의 정보를 파악할 때 사용.
: 데이터의 기초통계량(개수, 평균, 표준편차, 사분위, 중앙값) 확인
isnull()
df.isnull().sum()
dropna()
df.dropna()
df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3'])
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3'])
# IQR (Interquartile Range) 방법 찾아보기
# 참고 : https://www.scribbr.com/statistics/interquartile-range/
# 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)]
DataFrame['column_name'] = DataFrame['column_name'].astype(new_dtype)
데이터 타입(Data Type) | 설명(Description) | 예시(Example) |
---|---|---|
int64, int32 | 정수형 데이터 (64비트 또는 32비트) | 1, 42, -10, 1000 |
float64, float32 | 부동 소수점 수 (64비트 또는 32비트) | 3.14, -0.001, 2.718 |
object | 문자열 데이터 (일반적으로 문자열) | 'Hello', 'Data Science' |
bool | 불리언(참/거짓) 데이터 | True, False |
datetime64 | 날짜와 시간 데이터 | '2023-12-31 08:00:00' |
timedelta64 | 시간 간격(두 날짜 또는 시간 사이의 차이) 데이터 | '3 days', '2 hours' |
category | 카테고리형 데이터 (제한된 고유 값으로 구성) | 'Red', 'Blue', 'Green' |
: 정수 기반 인덱스
df.iloc[행 번호, 열 번호]
* 여러 개 선택 시, 리스트로 묶어서 기입
selected_data = df.iloc[1:4, 0:2] # 인덱스 1부터 3까지의 행과 0부터 1까지의 열 선택
: 레이블 기반 인덱스
df.loc["행 이름", "열 이름"]
* 여러 개 선택 시, 리스트로 묶어서 기입
selected_data = df.loc['b':'d', 'A':'B'] # 레이블 'b'부터 'd'까지의 행과 'A'부터 'B'까지의 열 선택
: 특정 조건을 만족하는 데이터 선택 시, 불리언 값을 가지는 조건식을 이용해 행을 선택하는 방법. '필터링'을 가능하게 하는 방법.
# 'age' 열에서 30세 이상인 경우의 'name' 열만 선택
df.loc[df['age'] >= 30, 'name']
# 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링
df[(df['age'] >= 30) & (df['gender'] == 'Male')]
(cf) 논리 연산자
AND | OR | NOT |
---|---|---|
& | vertical bar(shift+\) | ~ |
: 시리즈, DF 값들 중에서 특정 값이나 리스트 안에 포함된 값들을 찾아내 불리언 값을 반환. 원하는 조건에 해당하는 데이터를 빠르게 필터링하거나 선택 가능.
True | False |
---|---|
값을 포함할 때 | 값을 포함하지 않을 때 |
# 데이터프레임 전체에서 여러 조건을 확인하여 필터링
result = df.isin({'A': [1, 3], 'B': ['apple', 'orange']})
print(result)
: 데이터 속 NaN값에 대한 불리언 값 반환.
True | False |
---|---|
NaN일 때 | NaN이 아닐 때 |
: NaN 행이나 열을 '단순 삭제'할 때 사용.
: axis를 지정해 행이나 열을 삭제
[행=0, 열(기본값=생략 가능)=1]
: DF를 상하, 좌우로 연결.
axis | ignor_index |
---|---|
연결하고자 하는 축(방향) 지정[상하(기본)=0, 좌우=1]) | 연결된 결과 DF의 인덱스 유지[기본=False, 기존 인덱스 무시하고 새로운 인덱스 생성=True] |
vertical = pd.concat([df1, df2], axis=0)
horizontal = pd.concat([df1, df2], axis=1)
: DF를 좌우로 연결. 주로 두 개 이상의 데이터프레임에서 공통된 열이나 인덱스를 기준으로 데이터를 병합할 때 활용. (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)
: DF를 그룹화하고, 그룹 단위로 데이터를 분할, 적용, 결합하는 기능 제공.
: 기준 열(혹은 열들-리스트로 지정해서 코드 작성)을 지정하여 데이터프레임을 그룹으로 나눔.
: 그룹 단위로 원하는 연산(평균, 합, 개수 등)을 수행.
: 각 그룹의 연산 결과를 하나의 데이터프레임으로 결합하여 새로운 데이터프레임을 생성.
grouped_sum = df.groupby('Category').sum()
grouped_count = df.groupby('Category').count()
grouped_max = df.groupby('Category').max()
grouped_min = df.groupby('Category').min()
# 샘플 데이터프레임 생성
data = {
'Category': ['A', 'A', 'B', 'B', 'A', 'B'],
'SubCategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
'Value1': [1, 2, 3, 4, 5, 6],
'Value2': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)
# 'Category'와 'SubCategory' 열을 기준으로 그룹화하여 각 그룹별 'Value1'과 'Value2'의 평균, 합 계산
grouped_multiple = df.groupby(['Category', 'SubCategory']).agg({'Value1': ['mean', 'sum'], 'Value2': 'sum'})
: 데이터를 재구성하여 요약, 집계된 정보를 보여주는 테이블 형태. 하나의 칸에 여러 값이 들어갈 수 있음. 집계함수(aggfunc) 사용.
df.pivot_table(열, index[열1,..,열n], columns=[열1,...,열n], aggfunc=집계함수)
# 샘플 데이터프레임 생성
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')
: 값의 특성 상 하나의 칸에 여러 값이 들어갈 수 없는 경우, 집계함수를 사용하지 않고, pivot_table 대신 pivot 함수를 사용.
df.pivot(values=duf, index=[열1,..,열n], columns=[열1,...,열n])
(cf) ascednig(T/F)
: 기본값은 True(오름차순).
: 컬럼 기준으로 정렬.
: 인덱스 기준으로 정렬
: 파이썬의 변수, 함수, 객체를 파일로 저장 후 불러올 수 있는 라이브러리.
import pandas as pd
# 샘플 데이터프레임 생성
data = {
'Column1': [1, 2, 3, 4, 5],
'Column2': ['A', 'B', 'C', 'D', 'E']
}
df = pd.DataFrame(data)
# 데이터프레임을 pickle 파일로 저장
df.to_pickle('dataframe.pkl') # 데이터프레임을 'dataframe.pkl' 파일로 저장
# pickle 파일에서 데이터프레임 불러오기
loaded_df = pd.read_pickle('dataframe.pkl') # 'dataframe.pkl' 파일에서 데이터프레임 불러오기
print(loaded_df)