본문 바로가기

Language/Python

Pandas 심화

- 조건으로 검색하기

 

masking operation

df = pd.DataFrame(np.random.rand(5,2), columns=["A","B"])
print(df["A"] < 0.5)

print(df[(df["A"]<0.5) & (df["B"]>0.3)])
print(df.query("A<0.5 & B>0.3"))

마스킹연산을 query를 사용해서도 할 수 있다.

 

print(df["Animal"].str.contains("Cat"))
print(df.Animal.str.match("Cat"))

문자열은 위와 같이 검색가능하다.


- apply

 

df = pd.DataFrame(np.arange(5), columns=["Num"])
# print(df["Num"].apply(lambda x: x**2))
df["Square"] = df.Num.apply(lambda x: x**2)
print(df)

apply(function) 메소드는 map처럼 원소별로 함수를 각각 입력한 값을 받을수 있다.

df = pd.DataFrame(columns=["phone"])
df.loc[0] = "010-1234-1234"
df.loc[1] = "공일공-일이삼사-사삼이일"

df["preprocess_phone"] = ''

dic = {
    "공":"0",
    "일":'1',
    "이":'2',
    "삼":'3',
    "사":'4',
    "-":'',
    ".":""
}

def func(x):
    for a, b in dic.items():
        x = x.replace(a,b)
    return x
df["preprocess_phone"] = df["phone"].apply(func)
print(df)

print(df.replace({"010-1234-1234":"안녕하세요", "공일공-일이삼사-사삼이일":"저에요"}))

값만 변경하고 싶을때, replace 메서드로 가능

inplace=True를 같이 작성하면, 바로 df가 변경


- groupby

만약 같은 값을 가진 행끼리 그룹을 만들고 싶다면?

 

df = pd.DataFrame({'key':["a",'b','c',"a",'b','c'], 'data1':[1,2,3,1,2,3],'data2':[1,3,4,5,6,7]})
print(df.groupby('key'))
print(df.groupby('key').sum())
print(df.groupby(['key','data1']).sum())

groupby로 그룹을 만들었을때, 연산이 없는경우, object로 출력된다.

 

- aggregate

집계를 한번에 계산하는 메소드

print(df.groupby('key').aggregate(['min',np.median,max]))
print(df.groupby('key').aggregate({'data1':"min", 'data2':np.sum}))

 

- filter

참인 값만 출력해주는 메소드

print(df.groupby('key').filter(lambda x: x['data2'].mean()>3))

 

- apply

groupby를 통해 묶인 데이터에 함수 적용하는 메소드

print(df.groupby('key').apply(lambda x: x.max()- x.min()))

 

- get_group

groupby로 묶인 데이터에서 key값으로 데이터를 가져올수 있는 메소드

 


- MultiIndex& pivot_table

 

df = pd.DataFrame(
    np.random.randn(4,2),
    index=[['A','A','B','B'],[1,2,1,2]],
    columns=['data1','data2']
)
print(df)

Index를 계층적으로 만들수 있다.

 

df = pd.DataFrame(
    np.random.randn(4,4),
    columns=[['A','A','B','B'],[1,2,1,2]],
)
print(df)

column index도 계층적으로 생성 가능

 

나중에 다양한 데이터가 있는 파일을 가져와서 pivot_table도 만들어보자.

 

 

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

Pandas_Operations&function, Sort  (0) 2023.02.26
Pandas_Series, DataFrame  (0) 2023.02.24
Numpy_Broadcasting, masking  (0) 2023.02.23
Numpy_Indexing, Slicing, Operator  (1) 2023.02.23
Numpy_Create Array  (0) 2023.02.23