데이터 프레임 기초
* 데이터 프레임 필터링
titanic[titanic.sex == "male"]
titanic.loc[titanic.sex == "male"]
#동일한 결과 리턴
대괄호를 이용한 체인인덱싱 필터링 방식은 길어지면 많은 문제를 야기하므로 loc 메소드를 이용한 방식을 권장.
* 데이터 타입에 따른 열을 필터링 하는 방법
mask = titanic.dtypes == object #object형 추출
titanic.loc[:, ~mask] #타이타닉 데이터에서 object을 제외한 열 선택
* AND 조건으로 데이터프레임 필터링
mask1 = titanic.sex == "male"
mask2 = titanic.age > 14
#mask1과 mask2에 대한 행 필터링, [] 열 필터링
male_surv = titanic.loc[mask1 & mask2, ["survived", "pclass", "sex", "age"]]
#데이터확인
male_surv.head()
*OR 조건으로 데이터프레임 필터링
mask1 = titanic.sex == "female"
mask2 = titanic.age < 14
#mask1 혹은 mask2 에 대한 행 필터링, [] 열 필터링
woman_surv = titanic.loc[mask1 | mask2, ["survived","pclass","sex","age"]]
#데이터확인
woman_surv.head()
* between() 메소드, isin() 메소드
정확한 데이터를 잘 모를때 범위지정에 좋음
data.Year.between(2001, 2024).head() #2001년 부터 2024년까지 year 데이터, boolean 시리즈로 리턴
new_data = data.loc[data.Year.between(2001, 2024, inclusive=True)] #경계값을 포함하는지 여부에 대한 파라미터
check = [2002, 2008]
data.Year.isin(check).head() #2002년, 2008년 해당되는지 확인, boolean 시리즈로 리턴
new_data = data.loc[data.Year.isin(check)] #2002년 혹은 2008년 데이터
new_data2 = data.loc[~data.Year.isin(check)] #2002년 2008년 제외 데이터
* any() 메소드, all() 메소드
any() : 주어진 축에서 하나의 값이라도 해당 조건이 있는지 확인, True False 리턴
all() : 모든 원소가 해당되는지를 확인, True False 리턴
(data.sex == "male").any() #True, 데이터에 남성이 하나라도 있음
(data.sex == "male").all() #False, 데이터에 여성이 하나라도 있음
#숫자 시리즈 데이터
#숫자 0은 False를 의미, 나머지 숫자는 True를 의미
pd.Series([-1, 0.5, 1, 0]).all() #해당 시리즈 데이터에 0이 아닌 값들만 있는지 확인, False 리턴
pd.Series([-1, 0.5, 1, 0]).any() #해당 시리즈 데이터에 0이 하나라도 있는지 확인, True 리턴
* 행, 열 삭제하기
<열>
drop() : column 파라미터를 이용해 지우고자 하는 열의 라벨을 입력
data.drop(columns = "Sport")
data.drop(columns=["Sport", "Age"], inplace=True) #원본 데이터프레임 변경사항 적용
data.drop(labels="Sport", axis="columns")
cf) loc 연산자를 이용해 열을 선택해서 저장하는 방법도 있음
data = data.loc[: , ["Year","City","Country","Medal"]]
많은 컬럼 중 몇개만 삭제하는거면 drop() 메소드 사용하고, 많은 컬럼 중 몇개만 사용하는거면 loc로 선택하는 방법이 편안할 듯 하다!
<행>
drop() : index 파라미터를 이용해 지우고자 하는 인덱스의 라벨을 입력
data.drop(index="David, Alfred")
data.drop(index = ["David, Alfred" , "Lane, Joe"] , inplace = True) #원본 데이터 변경
data.drop(labels="David, Alfred" , axis=0, inplace=True) #axis=0 혹은 axis="index"로 설정
cf) loc 연산자를 이용해 특정 조건의 행들로 이루어진 새 데이터 프레임 만들기
new_data = data.loc[data.Year == 2002] #년도가 2002년인 새 데이터
mask1 = data.Year == 2002
mask2 = data.Sport = "Baseball"
new_data = data.loc[~(mask1 | mask2)] #2002년도와 야구 데이터 제외한 새 데이터
#이후 2002년 데이터가 다 지워졌는지 확인하는 방법
(new_data.Year == 2002).value_counts() #False가 몇개인지 나오고 True는 없어야 됨
#Baseball 데이터가 다 지워졌는지 확인하는 방법
new_data.Sport.isin(["Baseball"]).any() #False 리턴
(new_data.Sport == "Baseball").any() #False 리턴
* 열 추가, 새로운 열 만들기
data["Zeros"] = 0 #원래 없는 열을 추가, 값은 모두 0으로 채움
data.Zeros = "zero" # .을 이용해 원래 있는 열에 값을 모두 바꿈
Pandas는 Numpy 배열과 마찬가지로 각 원소별 벡터화 연산이 가능한 장점이 있음.
반복문을 사용할 필요 없이 연산이 가능함.
원본 데이터 열을 이용해 새로운 데이터 열을 추가하기 용이.
# 1.타이타닉 침몰 년도에서 승객의 age를 빼서 승객의 출생연도 열 만들기
titanic["YoB"] = 1912 - titanic.age
# 2. 승객의 형재자매(sibsp)와 부모자식(parch) 수를 합쳐 직계가족수 열 만들기
titanic["relatives"] = titanic.sibsp + titanic.parch
# 3. 기존 열 삭제
titanic.drop(columns = ["sibsp" , "parch"] , inplace = True)
# 4. 티켓 값 물가상승률을 고려해 현재가격으로 열 만들기
titanic.fare = titanic.fare * 10 #10배 물가상승
insert() 메소드를 이용해 특정 인덱스 위치에 열 추가
data.insert(loc = 6, column = "relatives", value = relatives)
#loc=인덱스 위치 지정, column=삽입 열의 라벨, value=새 열의 값이 될 변수
'스터디 > Data' 카테고리의 다른 글
[Imple] 비즈니스 사례 실습 : 영업(Sales department) 사례 (1) | 2024.04.12 |
---|---|
[Imple] 비즈니스 사례 실습 : 마케팅(marketing) 사례 (1) | 2024.03.28 |
[Imple] 비즈니스 사례 실습 : 인사팀(personnel management) 사례 (0) | 2024.03.19 |
[Imple] 데이터 핸들링을 위한 Pandas (3) | 2024.02.13 |
[이론] 데이터 분석 간단 통계학 (0) | 2024.01.30 |