○ Numpy array와 마찬가지로 masking 연산이 가능하다
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(5,2), columns=["A", "B"])
df["A"] < 0.5
○ 조건에 맞는 DataFrame row를 추출 가능
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(5, 2), columns=["A","B"])
df[(df["A"] < 0.5) & (df["B"] > 0.3)]
df.query("A < 0.5 and B > 0.3")
○ 문자열이라면 다른 방식으로도 조건 검색이 가능하다
df["Animal"].str.contains("Cat")
df.Animal.str.match("Cat")
○ 함수로 데이터 처리하기
[apply] 를 통해서 함수로 데이터를 다룰 수 있다.
df = pd.DataFrame(np.arange(5), columns=["Num"])
def square(x) :
return x**2
df["Num"].apply(square)
df["Square"] = df.Num.apply(lambda x: x**2)
df = pd.DataFrame(columns=["Phone"])
df.loc[0] = "010-1234-1235"
df.loc[1] = "공일공-일이삼사-일이삼오"
df.loc[2] = "010.1234.일이삼오
df["preprocess_phone"] = ' '
def get_preprocess_phone(phone):
mapping_dict = {
"공" : "0",
"일" : "1",
...
"_" : "",
"+" : ""
}
for key, value in mapping_dict.items():
phone = phone.replace(key, value)
return phone
df["preprocess_phone"] = df["phone"].apply(get_preprocessed_phonenumber)
replace:apply 기능에서 데이터 값만 대체 하고 싶을 때
df.Sex.replace({"Male" : 0, "Female" : 1})
df.Sex.replace({"Male" : 0, "Female" : 1}, inplace=True)
[multiindex] 인덱스를 계층적으로 만들 수 있다.
df = pd.DataFrame(
np.random.randn(4,2),
index=['A','A','B','B'],[1,2,1,2],
columns=['data1','data2'])
열 인덱스도 계층적으로 만들 수 있다.
df = pd.DataFrame(
np.random.randn(4,4),
columns=[["A","A","B","B"], ["1","2","1","2"]])
다중 인덱스 칼럼의 경우 인덱싱은 계층적으로 한다.
인덱스 탐색의 경우에는 loc, iloc를 사용가능하다
df["A"]
df["A"]["1"]
[실습1]
import numpy as np
import pandas as pd
df1 = pd.DataFrame(
np.random.randn(4, 2),
index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]],
columns=['data1', 'data2']
)
print("DataFrame1")
print(df1, "\n")
df2 = pd.DataFrame(
np.random.randn(4, 4),
columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]]
)
print("DataFrame2")
print(df2, "\n")
# 명시적 인덱싱을 활용한 df1의 인덱스 출력
print("df1.loc['A', 1]")
print(df1.loc['A', 1], "\n")
# df2의 [A][1] 칼럼 출력
print('df2["A"]["1"]')
print(df2["A"]["1"], "\n")
○ 그룹으로 묶기 :
[groupby] 간단한 집계를 넘어서서 조건부로 집계하고 싶은 경우
df = pd.DataFrame({'key' : ['A', 'B', 'C', 'A', 'B', 'C'], 'data1' : [1,2,3,1,2,3], 'data2' : np.randaom.randint(0, 6, 6)})
df.groupby('key')
df.groupby('key').sum()
df.groupby(['key', 'data1']).sum()
[aggregate] groupby를 통해서 집계를 한번에 계산하는 방법
df.groupby('key').aggregate(['min', np.median. max])
df.groupby('key').aggregate({'data1' : 'min', 'data2' : np.sum})
[filter] groupby를 통해서 그룹 속성을 기준으로 데이터 필터링
def filter_by_mean(x) :
return x['data2'].mean() > 3
df.groupby('key').mean()
df.groupby('key').filter(filter_by_mean)
[apply] groupby를 통해서 묶인 데이터에 함수 적용
df.groupby('key').apply(lambda x : x.max() - x.min())
[get_group] groupby로 묶인 데이터에서 key값으로 데이터를 가져올 수 있다.
df = pd.read.csv("./univ.csv")
df.head()
df.groupby("시도").get_group("충남")
len(df.groupby("시도").get_group("충남")) #94
[실습2] 그룹으로 묶기
import numpy as np
import pandas as pd
df = pd.DataFrame({
'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [1, 2, 3, 1, 2, 3],
'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")
# groupby 함수를 이용해봅시다.
# key를 기준으로 묶어 합계를 구해 출력해보세요.
df.groupby('key')
df1 = df.groupby('key').sum()
print(df1)
# key와 data1을 기준으로 묶어 합계를 구해 출력해보세요.
df2 = df.groupby(['key','data1']).sum()
print(df2)
실습-이론4:그룹으로 묶기
import numpy as np
import pandas as pd
df = pd.DataFrame({
'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [0, 1, 2, 3, 4, 5],
'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")
# aggregate를 이용하여 요약 통계량을 산출해봅시다.
# 데이터 프레임을 'key' 칼럼으로 묶고, data1과 data2 각각의 최솟값, 중앙값, 최댓값을 출력하세요.
df1 = df.groupby('key').aggregate(['min',np.median,'max'])
print(df1)
# 데이터 프레임을 'key' 칼럼으로 묶고, data1의 최솟값, data2의 합계를 출력하세요.
df2 = df.groupby('key').aggregate({'data1':'min', 'data2':np.sum})
print(df2)
실습-이론5:그룹으로 묶기
import numpy as np
import pandas as pd
df = pd.DataFrame({
'key': ['A', 'B', 'C', 'A', 'B', 'C'],
'data1': [0, 1, 2, 3, 4, 5],
'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")
# groupby()로 묶은 데이터에 filter를 적용해봅시다.
# key별 data2의 평균이 3이 넘는 인덱스만 출력해봅시다.
print("filtering : ")
def filter_by_mean(x) :
return x['data2'].mean() >3
df1 = df.groupby('key').filter(filter_by_mean)
print(df1)
# groupby()로 묶은 데이터에 apply도 적용해봅시다.
# 람다식을 이용해 최댓값에서 최솟값을 뺀 값을 적용해봅시다.
print("applying : ")
df2 = df.groupby('key').apply(lambda x : x.max() - x.min())
print(df2)
[pivot_table]
index는 행 인덱스로 들어갈 key
column에 열 인덱스로 라벨링될 값
value에 분석할 데이터
예) 타이타닉 데이터에서 성별과 좌석별 생존률 구하기
df.pivot_table(
index = 'sex', columns='class', values = 'survived'
aggfunc=np.mean)
예)2
df.pivot_table(
index="월별", columns='내역', valules=["수입",'지출'])
[실습3] 피리부는 사나이를 따라가는 아이들
import pandas as pd
import numpy as np
#elice_utils = EliceUtils()
def main():
# 파일을 읽어서 코드를 작성해보세요
# 경로: "./data/the_pied_piper_of_hamelin.csv"
df = pd.read_csv("./data/the_pied_piper_of_hamelin.csv")
children = df[df["구분"] == "Child"]
print(children.groupby("일차").mean())
children1 = children.pivot_table(
index = "일차", columns = "성별", values = "나이",
aggfunc=np.mean)
print(children1)
if __name__ == "__main__":
main()
'IT인터넷 > Python' 카테고리의 다른 글
[디지털 문해력] SQL로 데이터 다루기(210919) (0) | 2021.10.03 |
---|---|
[디지털 문해력]Python으로 시작하는 데이터 분_Matplotlib 데이터 시각화(211002) (0) | 2021.10.02 |
[디지털 문해력]Python으로 시작하는 데이터 분석_Numpy 사용해보기(210927) (0) | 2021.10.02 |
[디지털 문해력]Python으로 시작하는 데이터 분석_Pandas 기본 알아보기(210930) (0) | 2021.10.02 |
[디지털 문해력]Python 파이썬 배우기 2일차(210915) (0) | 2021.09.19 |
댓글