Notice
Recent Posts
Recent Comments
Link
01-04 19:27
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

AI 전문가가 되고싶은 사람

파이썬 프로그래밍 (pandas) 복습 본문

기자단 활동

파이썬 프로그래밍 (pandas) 복습

Kimseungwoo0407 2024. 2. 24. 16:29

데이터프레임

테이블 형태, 엑셀 형태 ( 보통은 csv파일, 엑셀 파일 또는 DB에서 읽어옴 )

 

 

1. 인덱스와 열 이름이 없는 형태

데이터프레임은 실무에서는 자주 볼 수 없음

 

2. 열 이름을 지정한 형태

인덱스를 지정할 필요가 없는 경우가 많으므로 자주 보게 되는 형태

 

3. 인덱스와 열 이름을 지정한 형태

대부분 주식 시세와 같은 날짜가 인덱스로 지정되는 경우

 

데이터프레임 만들기 ( pd.DataFrame() )

 

대부분 리스트, 딕셔너리, Numpy 배열로부터 데이터프레임을 만듦

데이터 프레임을 만들기 위해서는 (데이터, 열 이름, 인덱스 이름 )이 필요

열 이름 지정 x -> 열 번호에 기반한 정수가 열 이름이 됨

인덱스 이름 지정 x -> 행 번호에 기반한 정수가 인덱스 이름이  됨

 

csv파일 읽어오기

data = pd.read_csv(path)

 

상위 데이터 확인 ( head )

data.head()

 

하위 데이터 확인 ( tail ) 

data.tail()

 

크기 확인 ( shape )

data.shape

 

열 확인 ( columns )

print(data.columns)

 

데이터프레임을 리스트 함수에 넣으면 열 이름이 리스트로 반환

list(data)

 

자료형 확인 ( int64 : 정수, float64 : 실수, object : 문자열 ) 

data.dtypes

 

열 자료형, 값 개수 확인

data.info()

 

기초통계정보 확인

 

데이터에 대한 많은 정보를 제공하는 중요한 메소드

개수, 평균, 표준편차, 최솟값, 사분위값, 최댓값 표시

data.describe()

 

정렬해서 보기

 

sort_values() 메소드로 특정 열을 기준으로 정렬

ascending 옵션을 설정해 기본값 오름차순(True) , 내림차순(False) 

data.sorted_values(by='특정 열', ascending = (True or False))

 

특정 열1이 동률이면 특정 열2로 정렬하기

data.sort_values(by=['특정 열1', '특정 열2'], ascending=[True, False])

 

별도로 저장하고, 뒤죽박죽 섞여 있는 인덱스 reset

temp = data.sort_values(by=['특정 열1', '특정 열2'], ascending=[True, False])
temp.reset_index(drop = True) # 기존 인덱스 없앨 지 그대로 둘 지

 

기본 집계

고윳값 확인 ( unique() )

print(data['특정 열'].unique())

 

고윳값과 개수 확인 ( value_counts() )

print(data['특정 열'].value_counts())

 

 

특정 열의 합계, 최댓값, 평균값, 중앙값

print(data['특정 열'].sum()) # 합계
print(data['특정 열'].max()) # 최댓값
print(data['특정 열'].mean()) # 평균
print(data['특정 열'].median()) # 중앙값

 

 

DataFrame 조회

 

시리즈와 데이터프레임

1. 데이터 프레임 : 2차원 구조

2. 시리즈 : 1차원 구조

* 데이터프레임에서 열 하나를 띄어 내면 시리즈

https://qiita.com/alokrawat050/items/f807d193d1e677f6916f

 

특정 열 조회

 

df.loc[ : , [열 이름1, 열 이름2,...]] 형태로 조회할 열 이름을 리스트로 지정

열 부분은 생략 가능, 행 부분은 생략 x + 조회할 열이 하나면 리스트 형태가 아니어도 됨

#특정 열 조회 : 시리즈로 조회
data['특정 열']
# data.특정 열

 

# 특정 열1, 특정 열2 조회 : 데이터 프레임
data[['특정 열1','특정 열2']]

 

조건으로 조회

df.loc[조건] 형태로 조건을 지정해 조건에 만족하는 데이터만 조회 가능

* 우선 조건이 제대로 판단이 되는지 확인한 후 그 조건을 대 괄호 안에 넣기

 

1. 단일 조건 조회

data['특정 열'] > 10 # 결과는 True, False

# 특정 열 값이 10 보다 큰 행 조회
data.loc[data['특정 열'] > 10]

 

2. 여러 조건 조회

[] 안에 조건을 여러 개 연결할 때 and와 or 대신에 &와 |를 사용해야 합니다.

# and로 여러 조건 연결
# (조건1) & (조건2)

data.loc[(data['특정 열'] > 10) & (data['특정 열'] == 4)]

# |로 여러 조건 연결
# (조건1) | (조건2)
data.loc[(data['특정 열'] > 10) | (data['특정 열'] == 4)]

 

3. isin(), between()

isin([값1, 값2, ..., 값 n]) : 값1 또는 값2 또는... 값 n인 데이터만 조회

*주의 : isin(리스트) 값들을 리스트 형태로 입력해야 함

 

# 값 나열
data.loc[data['특정 열'].isin([1,4])]

# 같은 의미
data.loc[(data['특정 열'] == 1) | (data['특정 열'] == 4)]

 

between(값1,값2) : 값1 ~ 값2까지 범위 안의 데이터만 조회

inclusvie = 'both' (기본값)

* 'left', 'right', 'neither'

# 범위 지정
data.loc[data['특정 열'].between(25, 30)]

# and 조건
data.loc[(data['특정 열'] >= 25) & (data['특정 열'] <= 30)]

 

4. 조건을 만족하는 행의 일부 열 조회

 

# 조건에 맞는 하나의 열 조회
data.loc[data['특정 열1'] >= 10000, ['특정 열2']]

# 조건에 맞는 여러 열 조회
data.loc[data['특정 열'] >= 10000, ['특정 열1', '특정 열2', '특정 열3']]

 

데이터프레임 집계

# 특정 열 합계
data['특정 열'].sum()

# 특정 열1, 특정 열2 각각의 평균
data[['특정 열1', '특정 열2']].mean()

 

1. 집계하기

- as_index = True 설정(기본값)하면 집계 기준이 되는 열이 인덱스 열이 됨

# 특정 열1 별 특정 열2 평균 --> 시리즈
data.groupby('특정 열1', as_index=True)['특정 열2'].mean()

# 특정 열1 별 특정 열2 평균 --> 데이터프레임
data.groupby('특정 열1', as_index=True)[['특정 열2']].mean()

 

- as_index = False를 설정하면 행 번호를 기반으로 한 정수 값이 인덱스로 설정됨

 

2. 여러 열 집계

# 특정 열1 기준으로 특정 열2와 특정 열3의 평균 구하기
data.groupby('특정 열1', as_index=False)[['특정 열2','특정 열3']].mean()
# '특정 열1', '특정 열2'별 나머지 열들 평균 조회
data_sum = data.groupby(['특정 열1', '특정 열2'], as_index=False)[['특정 열3','특정 열4']].mean()

 

3. 여러 함수로 한꺼번에 집계

# df.groupby().agg(['함수1','함수2',...]]
data_agg = data.groupby('특정 열1', as_index=False)[['특정 열2']].agg(['min','max','mean'])