파이썬 입문/데이터 분석 기초
파이썬 데이터 분석(3) 인덱스
explorer999
2023. 12. 5. 11:51
import seaborn as sns
df=sns.load_dataset('mpg') #mpg는 연비. miles per gallon
print(df.head()) # 맨 위 5행을 출력
#인덱스 열을 네임으로 바꾸고 싶을 때.
df.set_index('name', inplace=True) #inplace=True는 원본 객체를 변경하겠다는 말이다.
#인덱스 정렬.
df.sort_index(inplace=True) # 이렇게 쓰면 index기준, 기본적으로 오름차순으로 정렬된다.
df.sort_index(inplace=True, ascending=False) #내림차순으로 하고 싶으면 ascending=False
#인덱스를 다시 원래대로 돌려놓기
df.reset_index(inplace=True)
df.head()
print(df.head())
#cylinders 열은 자동차의 실린더 개수를 의미한다. 어떤 값들이 있을까?
import seaborn as sns
df=sns.load_dataset('mpg')
print(df['cylinders'].unique())
# 실린더가 4인 조건을 만족하는 행만 출력
filter_bool = (df['cylinders'] ==4)
print(filter_bool.tail(10))
#행 인덱스에 위의 불리언 시리즈를 입력하면 해당 조건을 만족하는 행만 선택된다.
print(df.loc[filter_bool, ]) #쉼표 뒤에는 열 이름. 칸 비워놓는 건 모든 열을 출력하겠다는 의미
# 실린더 개수가 4개이면서 마력이 100이상인 데이터만 출력해 보자.
filter_bool_2 = (df['cylinders']== 4) & (df['horsepower']>=100)
print(df.loc[filter_bool_2,['cylinders', 'horsepower', 'name' ]])
#특정 이름을 가진 자동차의 데이터를 출력하고 싶을 때. or을 |로 나타낼 수 있음. 근데 너무 길다.
import seaborn as sns
df=sns.load_dataset('mpg')
filter_bool_3 = (df['name']== 'ford maverick') | (df['name']=='ford mustang ii')| (df['name']== 'chevrolet impala')
print(df.loc[filter_bool_3, ])
#더 간단한 버전.
# isin()메서드 내에 조건들을 리스트 형태로 입력하면 해당 값이 존재=True, 존재x=False로 반환한다.
filter_isin = df['name'].isin(['ford maverick', 'ford mustang ii', 'chevrolet impala'])
print(df.loc[filter_isin, ['name', 'weight', 'model_year']])
#특정 열의 데이터별로 정렬해보자. 마력이 같은 자동차들끼리 묶어서 작은 순서대로 정렬하기.
print(df.loc[filter_isin, ].sort_values('horsepower'))
#여기서도 내림차순을 하려면 ascending=False입력하면 내림차순 됨.
#새로운 열 만들기: 무게 대비 연비인 mpg/wt를 나타내는 ratio열을 만들어 보자.
import seaborn as sns
df=sns.load_dataset('mpg')
df['ratio'] = (df['mpg']/ df['weight']) * 100
print(df.head())
#특정 열의 조건을 기반으로 새로운 열 만들기: NumPy 패키지의 where()함수를 사용한다.
import pandas as pd
import numpy as np
num = pd.Series([-2, -1, 1, 2])
print(np.where(num>=0)) #num이라는 시리즈에는 -2부터 2까지의 정수가 있는데, 그 중 0보다 크거나 0과 같은 0, 1, 2인 지점의 인덱스만 반환함.
np.where(num >=0, '양수', '음수') #num이 0보다 크거나 0과 같으면 '양수'를 부여, 그렇지 않으면 '음수'를 부여한다.
print(np.where(num >=0, '양수', '음수'))
#위의 내용을 응용해서 horsepower를 세 단계로 구분하는 열을 만들어 보자.
import seaborn as sns
df=sns.load_dataset('mpg')
import numpy as np
df['horse_power_div']=np.where(
df['horsepower'] <100, '100 미만',
np.where((df['horsepower'] >=100) & (df['horsepower'] <200), '100이상',
np.where(df['horsepower'] >=200, '200이상', '기타')))
print(df.head())