생각하는 감쟈

[Python] 2-4) Data Frame 1 본문

Language/Python

[Python] 2-4) Data Frame 1

생각하는 감쟈🥔 2023. 3. 28. 11:23

 

 

 

 

 11일차 (23.03.27)

 


 

데이터 프레임의 데이터 조작

import seaborn as sns
titanic = sns.load_dataset("titanic")
titanic.head()
 
iris = sns.load_dataset("iris")

iris
 
titanic = sns.load_dataset("titanic",nrows=10)
titanic.head()
 
titanic["age"]
 
0    22.0
1    38.0
2    26.0
3    35.0
4    35.0
5     NaN
6    54.0
7     2.0
8    27.0
9    14.0
Name: age, dtype: float64
 

나이만 추출

 

titanic.loc[titanic.sex == "female", "age"]
 
1    38.0
2    26.0
3    35.0
8    27.0
9    14.0
Name: age, dtype: float64
 

여성 age 추출

여성을 뽑고 거기서age를 추출

 

뽑아내기

인덱스 loc iloc

import numpy as np
import pandas as pd

s = pd.Series(range(10))
s[3] = np.nan
s
 
0    0.0
1    1.0
2    2.0
3    NaN
4    4.0
5    5.0
6    6.0
7    7.0
8    8.0
9    9.0
dtype: float64
 
s.count()
 

결과 값 = > 9 NAn 값은 세지 않음

np.random.seed(2)
df = pd.DataFrame(np.random.randint(5, size=(4, 4)), dtype=float)
df.iloc[2, 3] = np.nan
df
 

seed값이 없으면 실행할때 마다 매번 다름 값이 나옴 세팅할려면 일정 값으로 정하기

df["a"] =열 출력 / 행 뽑고 싶으면 df[1:4]

df.loc[] = "행 / df.loc[행][열] = 슬라이싱 필요 없음 문자값 접근

df.iloc[0] / df.iloc[0][1] : 숫자값 접근

df.count()
 
0    4
1    4
2    4
3    3
dtype: int64
 

열이 기본 축이 됨, ex) 0행의 데이터가 4개 있다

 

 

import seaborn as sns
titanic = sns.load_dataset("titanic")
titanic.head()
 
titanic.count()
 
survived       891
pclass         891
sex            891
age            714
sibsp          891
parch          891
fare           891
embarked       889
class          891
who            891
adult_male     891
deck           203
embark_town    889
alive          891
alone          891
dtype: int64
 

열 데이터 값을 계산해 줌

np.random.seed(1)
s2 = pd.Series(np.random.randint(6, size=100))
s2.tail()
 
95    4
96    5
97    2
98    4
99    3
dtype: int32
 

랜덤 값 0에서부터 5까지 100개 추출

s2.value_counts()
 
1    22
0    18
4    17
5    16
3    14
2    13
dtype: int64
 

각각의 값이 나온 횟수

 

df[3].value_counts()
 
2.0    2
1.0    1
Name: 3, dtype: int64
 

3열을 출력 거기에 있는 값들이 옃개 씩 있나 확인.

 

정렬

정렬 기준 - 오르차순

내림 차순으로 하고 싶으면 (ascending=False) Flase로 입력

s2.value_counts().sort_index()
 
0    18
1    22
2    13
3    14
4    17
5    16
dtype: int64
 

s2.value_counts() => 데이터가 몇 개 인지 세 줌

인덱스의 기준으로 sort(오름차순 정렬) =>값기준 으로 하고싶으면 values로

s.sort_values()
 
0    0.0
1    1.0
2    2.0
4    4.0
5    5.0
6    6.0
7    7.0
8    8.0
9    9.0
3    NaN
dtype: float64
 
s2.value_counts().sort_index()
 
2    13
3    14
5    16
4    17
0    18
1    22
 

값기준 으로 하고싶으면 values로

s.sort_values()
 
0    0.0
1    1.0
2    2.0
4    4.0
5    5.0
6    6.0
7    7.0
8    8.0
9    9.0
3    NaN
 
s.sort_values(ascending=False)
 
9    9.0
8    8.0
7    7.0
6    6.0
5    5.0
4    4.0
2    2.0
1    1.0
0    0.0
3    NaN
 

내림차순 ascending=False

 

df.sort_values(by=1)
 

(by=1) : 1열을 기준으로 오름차순을 한다

df.sort_values(by=[1, 2])
 

(by=[1, 2]) : 첫번쨰 기준으로 정렬하고 혹시 같은 같이 있으면 2열로 기준을 잡아 정렬한다


연습문제)

sort_values 메서드를 사용하여 타이타닉호 승객에 대한

sex 인원수,age 인원수, class 인원수, alive 인원수를 구하라

np.random.seed(1)
df2 = pd.DataFrame(np.random.randint(10, size=(4, 8)))
df2
 

df2.sum(axis=1)
 
0    35
1    34
2    41
3    42
 

(axis=1) : 0=행 1=열

df2["RowSum"] = df2.sum(axis=1)
df2
 
df2.sum()
 
0          24
1          33
2          25
3          24
4          15
5          10
6           5
7          16
RowSum    152
 
df2.loc["ColTotal", :] = df2.sum()
df2
 

밑에 열 추가하기


연습문제)

타이타닉호 승객의 평균 나이를 구하라

titanic["age"].mean()
 

결과 => 29.69911764705882

 

타이타닉호 승객중 여성 승객의 평균 나이를 구하라.

titanic.loc[titanic.sex=="female"]["age"].mean()
 

결과 => 27.915708812260537

 

타이타닉호 승객중 1등실 선실의 여성 승객의 평균 나이를 구하라

titanic.loc[(titanic["class"]=="First")&(titanic["sex"]=="female")]["age"].mean()
 

결과 =>34.61176470588235

 


apply 변환

df3 = pd.DataFrame({
    'A': [1, 3, 4, 3, 4],
    'B': [2, 3, 1, 2, 3],
    'C': [1, 5, 2, 4, 4]
})
df3
 
df3.apply(lambda x: x.max() - x.min())
 
A    3
B    2
C    4
 

lambda : 이름이 없는 함수 값, 결과 값을 x로 리턴

apply 행,열 을 끈까지 계산

df3.apply(lambda x: x.max() - x.min(), axis=1)
 
0    1
1    2
2    3
3    2
4    1
 

축 바꿔서 계산

df3.apply(pd.value_counts)
 

 

20살 기준으로 성인, 미성년자 구분

titanic["adult/child"] = titanic.apply(lambda r: "adult" if r.age >= 20 else "child", axis=1)
titanic.tail()
 

 

타이타닉호의 승객에 대해 나이와 성별의 의한 카테고리 열인 category1열을 만들어라

category 카테고리는 다음과 같이 정의된다

 

1 20살이 넘으면 성별을 그대로 사용한다

2 20살 미만이면 성별에 관계없이 "child"리고 한다.

titanic["category"] = titanic.apply(lambda r:r.sex if r.age >= 20 else "child", axis=1)
titanic.tail()
 

 

fillna 메서드

df3.apply(pd.value_counts).fillna(0.0)
 

fillna가 없으면 nan값이 나옴 그 nan값이 0.0으로 채워짐

 

 

astype 메서드

타이타닉호의 승객 중 나이를 명시하지 않은 고객은 나이를 명시한 고객의 평균 나이 값이 되도록

titanic 데이터 프레임을 고쳐라.

df3.apply(pd.value_counts).fillna(0).astype(int)
 

연습문제)

타이타닉호의 승객에 대해 나이와 성별에 의한 카테고리 열인 category2 열을 만들어라

category2 카테고리는 다음과 같이 정의된다

 

1 성별을 나타내는 문자열 male 또는 female로 시작한다

2 성별을 나타내는 문자열 뒤에 나이를 나타내는 문자여에 온다

3 에를 들어 27살 남성은 male27 값이 된다

 

titanic["category2"] = titanic.sex + titanic.age.astype(str)
titanic
 

 

 

 

 

#ABC부트캠프 #부트캠프 #유클리드소프트 #파이썬 #고용노동부 #한국산업인력공단 #서포터즈 #python #Ai #Bigdata #cloud #대외활동 #대학생 #daily 

'Language > Python' 카테고리의 다른 글

[Python] 2-5) Matplotlib 1  (0) 2023.03.29
[Python] 2-4) Data Frame 2  (1) 2023.03.28
[Python] 2-3) Pandas Series  (1) 2023.03.27
[Python] 2-2) Jupyter Numpy  (0) 2023.03.23
[Python] 2-1) Jupyter 기초  (0) 2023.03.22
Comments