Pandas_All In One

P4·2023년 5월 2일
0

Pandas

목록 보기
1/1
post-thumbnail

타이타닉 데이터 다운로드

  • 데이터를 코드파일과 같은 경로에 위치시켜 주시기 바랍니다.

Pandas 더 많은 행과 열 출력하기

import pandas as pd
print("pandas version: ", pd.__version__)
pd.set_option('display.max_row', 500)
pd.set_option('display.max_columns', 100)

Pandas


start

import numpy as np
import pandas as pd
data = pd.read_csv('titanic.csv')

딕셔너리, 데이터프레임 만들기

dict = {'열인덱스' : [1, 2, 3, 4, 5],
        '열인덱스2' : [10, 20, 30, 40, 50]}
print(dict)

df_test = pd.DataFrame(dict)
display(df_test)

기본 조회 방법 (head, tail, describe, info)

display('-'*20 + '상위 5행' + '-'*20)

display(df.head()) # 상위 5개

display('-'*20 + '하위 5행' + '-'*20)

display(df.tail()) # 하위 5개

display('-'*20 + '컬럼명들을 확인' + '-'*20)

display(df.columns) # 칼럼명들 확인

display('-'*20 + 'array 형태로 확인' + '-'*20)

display(df.columns.values) # array 형태로 확인

display('-'*20 + 'list 형태로 확인' + '-'*20)

display(list(df)) # list 형태로 확인

display('-'*20 + '열 자료형 확인' + '-'*20)

display(df.dtypes) # 열 자료형 확인

display('-'*20 + '자료형, 값, 개수 확인' + '-'*20)

display(df.info()) # 자료형, 값, 개수 확인

display('-'*20 + '기초통계량 확인' + '-'*20)

display(df.describe()) # 기초통계량 확인

정렬, 고유값 개수, 고유값 확인 (sort_values, reset_index, unique, value_counts, nunique)

  • 읽기 힘드니 복붙해서 통째로 돌려보면 금방 이해할 수 있음
print('\033[43m' + ' '*30 + '\033[0m' + ' 2열만 따로 describe (describe) ' + '\033[43m' + ' '*30)

display(data[['Age', 'Fare']].describe()) # 2열만 따로 describe

print('\033[43m' + ' '*30 + '\033[0m' + ' Age가 적은 순서부터, 같은 값일 경우 Fare가 큰 순서 부터 (sort_values) ' + '\033[43m' + ' '*30)

temp = data.sort_values(by = ['Age', 'Fare'], ascending = [True, False]) # Age가 적은 순서부터, 같은 값일 경우 Fare가 큰 순서 부터
display(temp)

print('\033[43m' + ' '*30 + '\033[0m' + ' 인덱스 리셋, False하면 원래 인덱스가 안으로 들어가고 새로 리셋됨 (reset_index) ' + '\033[43m' + ' '*30)

display(temp.reset_index(drop = True)) # 인덱스 리셋, False하면 원래 인덱스가 안으로 들어가고 새로 리셋됨

print('\033[43m' + ' '*30 + '\033[0m' + ' survived에 어떤 요소가 있는지 (unique), 어떤 요소가 몇개 있는지 (value_counts), 요소의 종류 개수가 몇개인지 (nunique) ' + '\033[43m' + ' '*30)

display(data['Survived'].unique()) # 어떤 요소가 있는지 보여줌
print("0은 사망, 1은 생존")
display(data['Survived'].value_counts()) # 어떤 요소가 몇개 있는지까지 보여줌
display(data['Survived'].nunique()) # 요소의 종류 개수를 보여줌

범위 검색 (isin, between, loc, iloc)

  • between은 파라미터의 값에 따라 부등호의 형태가 결정된다

  • 이상의 위치를 조절하는 inclusive, both면 이상이하, neither이면 초과미만, left면 이상미만, right면 초과이하

  • loc는 :으로 범위를 넣으면 이상이하로 작동됨 (헷갈림 주의)

  • iloc는 :으로 범위를 넣으면 이상미만으로 작동됨

print('\033[43m' + ' '*30 + '\033[0m' + ' age가 4, 1인 것만 보여줌 (isin) ' + '\033[43m' + ' '*30)

display(data.loc[data['Age'].isin([4, 1])]['Age'].head()) # age가 4, 1인 것만 보여줌

print('\033[43m' + ' '*30 + '\033[0m' + ' 10이상 20이하의 값을 보여줌 (between) ' + '\033[43m' + ' '*30)

display(data.loc[data['Age'].between(10, 20)]['Age'].head(10)) # 10이상 20이하의 값을 보여줌
display(data.loc[data['Age'].between(10, 20, inclusive = 'left')]['Age'].head(10)) # 이상의 위치를 조절하는 inclusive, both면 이상이하, neither이면 초과미만, left면 이상미만, right면 초과이하

print('\033[43m' + ' '*30 + '\033[0m' + ' Age가 30세 이상인 행의 Sex, Name, Age출력 (loc) ' + '\033[43m' + ' '*30)

display(data.loc[data['Age'] > 30, ['Sex', 'Name', 'Age']])

print('\033[43m' + ' '*30 + '\033[0m' + ' data의 0~5행, Age열을 가져옴 (0~5) (loc) ' + '\033[43m' + ' '*30)

display(data.loc[0 : 5, ['Age']]) # data의 0~5행, Age열을 가져옴 (0~4아님)

print('\033[43m' + ' '*30 + '\033[0m' + ' data의 0~4행, 0~2열을 가져옴 (0~4) (iloc) ' + '\033[43m' + ' '*30)

display(data.iloc[0 : 5, 0 : 3]) # 얘는 0~4까지 가져옴

groupby, 컬럼명 변경 (rename)

print('\033[43m' + ' '*30 + '\033[0m' + ' 성별별 요금 각각의 개수, as_index가 True면 Sex가 인덱스 / False면 새로 인덱스를 만듬 (groupby) ' + '\033[43m' + ' '*30)

display(data.groupby(by = ['Sex'], as_index = True)['Fare'].value_counts()) # 성별별 요금 각각의 개수, as_index가 True면 Sex가 인덱스 / False면 새로 인덱스를 만듬

print('\033[43m' + ' '*30 + '\033[0m' + ' 성별별 요금, 클래스의 max, min, nunique (agg) ' + '\033[43m' + ' '*30)

display(data.groupby(by = ['Sex'], as_index = True)[['Fare', 'Pclass']].agg(['max', 'min', 'nunique'])) # agg는 들어있는 모든 함수를 표현해줌, groupby 최고 응용

print('\033[43m' + ' '*30 + '\033[0m' + ' 특정 컬럼명을 바꾸기 (rename) ' + '\033[43m' + ' '*30)

display(data.rename(columns = {'Pclass' : 'PC', 'Survived' : 'SV'}, inplace = False).iloc[:, 3 : 5]) # inplace = False라 실제로 값이 바뀌지는 않음, 특정 컬럼명만 바꾸기

print('\033[43m' + ' '*30 + '\033[0m' + ' Dataframe의 컬럼명 직접 변경 ' + '\033[43m' + ' '*30)

df_test = pd.DataFrame({"test1" : [0, 1, 2, 3, 4], "test2" : [5, 4, 3, 2, 1]})
df_test.columns = ['1번', '2번'] # 모든 칼럼명을 바로 바꾸려면 이렇게도 가능함
display(df_test)

활용 (cut, map, where, agg응용)

print('\033[43m' + ' '*30 + '\033[0m' + ' age 컬럼을 3등분해서 각각의 범위를 설정함 (cut) ' + '\033[43m' + ' '*30)

data['Age_range'] = pd.cut(data['Age'], 3, labels = ['childs', 'middle','adults']) # age 컬럼을 3등분해서 각각의 범위를 설정함

print('\033[43m' + ' '*30 + '\033[0m' + ' male은 1로, female은 2로 (map) ' + '\033[43m' + ' '*30)

data['Gen'] = data['Sex'].map({'male' : 1, 'female' : 0}) # male은 1로, female은 2로

print('\033[43m' + ' '*30 + '\033[0m' + ' 요금이 30이하인 사람은 under30, 이상인 사람은 over30 (where) ' + '\033[43m' + ' '*30)

data['Fare_range'] = np.where(data['Fare'].between(0, 30), 'under30', 'over30') # 요금이 30이하인 사람은 under30, 이상인 사람은 over30
display(data)

print('\033[43m' + ' '*30 + '\033[0m' + ' 몇세부터 몇세까지 childs인지, 몇세부터 몇세까지 middle인지... 이 범위를 알려줌 (agg 응용) ' + '\033[43m' + ' '*30)

display(data.groupby(['Age_range'], as_index = False)['Age'].agg(['min', 'max'])) # 나이 범위별 나이 (그니까 각 나이 범위의 최댓값, 최솟값) // 즉 나눈 구간의 범위를 알려줌
# tip: 음의 무한대는 -np.inf, 양의 무한대는 np.inf
profile
지식을 담습니다.

0개의 댓글