본문으로 바로가기

Pandas 기초

category Python/Data Analysis 2022. 11. 30. 00:56

titanic.csv 다운로드 주소 : https://www.kaggle.com/c/titanic/data

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]}
        
df = pd.DataFrame(dict) # 데이터프레임으로 변환
display(df)

# 기본 명령어들
print(df.head()) # 상위 5개

print('-'*50)

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

print('-'*50)

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

print('-'*50)

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

print('-'*50)

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

print('-'*50)

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

print('-'*50)

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

print('-'*50)

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

############################################################################################

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

print('\033[43m' + ' '*100)

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

print('\033[43m' + ' '*100)

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

print('\033[43m' + ' '*100)

display(data['Survived'].unique()) # 어떤 요소가 있는지 보여줌
display(data['Survived'].value_counts()) # 어떤 요소가 몇개 있는지까지 보여줌
display(data['Survived'].nunique()) # 요소의 종류 개수를 보여줌

print('\033[43m' + ' '*100)

############################################################################################

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

print('\033[43m' + ' '*100)

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' + ' '*100)

display(data.loc[data['Age'] > 30, ['Sex', 'Name', 'Age']]) # 설명 없어도 될거같음

print('\033[43m' + ' '*100)

display(data.loc[0 : 5, ['Age']]) # data의 0~5행, Age열을 가져옴 (0~4아님)
display(data.iloc[0 : 5, 0 : 3]) # 0~4까지 가져옴 loc = 컬럼명, iloc = 인덱스 기반인 것 같음

print('\033[43m' + ' '*100)

############################################################################################

display(data.groupby(by = ['Sex'], as_index = True)['Fare'].value_counts()) # 성별별 요금 각각의 개수, as_index가 True면 Sex가 인덱스 / False면 새로 인덱스를 만듬
display(data.groupby(by = ['Sex'], as_index = True)[['Fare', 'Pclass']].agg(['max', 'min', 'nunique'])) # agg는 들어있는 모든 함수를 표현해줌, groupby 응용

print('\033[43m' + ' '*100)

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

print('\033[43m' + ' '*100)

df_test.columns = ['1번', '2번'] # 모든 칼럼명을 바로 바꾸려면 이렇게도 가능
display(df_test)

data['Sex_num'] = np.where(data['Sex'] != 'male', 'yes', 'no') # 열 추가

############################################################################################

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

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

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

print('\033[43m' + ' '*100)

display(data.groupby(['Age_range'], as_index = False)['Age'].agg(['min', 'max'])) # 나이 범위별 나이 (각 나이 범위의 최댓값, 최솟값) // 즉 나눈 구간의 범위를 알려줌
# tip: 음의 무한대는 -np.inf, 양의 무한대는 np.inf
# 더 많은 행과 열 출력하기

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

'Python > Data Analysis' 카테고리의 다른 글

데이터 분석 시각화 total 정리  (0) 2023.03.28
Pandas Base  (0) 2023.03.19
Numpy 기초  (2) 2022.11.27