Pandas실습 – Part1

Pandas는 데이터 분석 시 매우 자주 사용하는 라이브러리 중 하나로 Pandas실습 형태로 포스팅을 작성하였습니다. Pandas는 의심할 여지 없이 테이블 형식의 데이터 처리, 조작 및 처리를 위해 매우 유용한 도구입니다. 이번 포스팅은 데이터 과학자들 사이에서 인기 있는 수많은 Pandas 기능들을 소개하고자 총 2개의 포스팅으로  구성하였습니다.  데이터 분석을 위한 최고의 Python 패키지 중 하나로 데이터 조작을 내재화하는 데 도움이 되었으면 합니다. Pandas실습 을 하기 위해서 먼저 질문에 대답하는 방식으로 해결책을 살펴보는 것이 좋겠습니다. (여기에서 제공한 해결방안이 문제를 해결하는 유일한 방법이 아닐 수도 있습니다. 다른 것을 생각해 낼 수 있고 , 그 방법이 정확할 수 있습니다.)


Pandas실습

Pandas실습 1. 다른 리스트를 기준으로 DataFrame 정렬

Pandas실습 용 예시 DataFrame을 생성합니다. DataFrame의 특정 열에 대한 모든 고유 값을 포함하는 리스트도 있습니다. 열의 값이 주어진 리스트와 동일한 순서로 나타나도록 DataFrame을 정렬해 보겠습니다.

import pandas as pd

df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
columns = [“Col_A”, “Col_B”])

sort_list = [“C”, “D”, “B”, “A”]

# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_A col_B
0 C 3
1 D 4
2 B 2
3 A 1
“””

해결방안
아이디어는 주어진 리스트에서 Series를 생성하는 것입니다. 각 인덱스는 문자를 나타내고 해당 값은 위치를 나타냅니다. 이를 사용하여 아래와 같이 원본 DataFrame을 생성된 Series에 매핑하고 참조를 위해 sort_values() 메서드에 전달할 수 있습니다.

s = pd.Series(range(len(sort_list)), index = sort_list)
df.sort_values(“Col_A”, key = lambda x: x.map(s))

 Col_ACol_B
2C3
3D4
1B2
0A1


Pandas실습 2. DataFrame의 특정 위치에 열 삽입

위에서 사용한 Pandas실습 용 DataFrame을 계속 이용하겠습니다. 그리고, 크기가 지정된 DataFrame의 행 수와 동일한 리스트가 있습니다. 작업은 DataFrame의 지정된 위치에 지정된 리스트를 새 열로 삽입하는 것입니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns = [“Col_A”, “Col_B”])
 
new_column = [“P”, “Q”, “R”, “S”]
insert_position = 1 # 열 삽입 위치
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_Acol_Ccol_B
0 A P 1
1 B Q 2
2 C R 3
3 D S 4
“””

해결방안
여기에서 insert() 메서드를 사용하고 아래와 같이 위치, column_name 및 값을 인수로 전달할 수 있습니다.

df.insert(insert_position, “col_C”, new_column)
df

  Col_A col_C Col_B
0 A P 1
1 B Q 2
2 C R 3
3 D S 4


Pandas실습 3. 열의 데이터 유형에 따른 열 선택

일반적으로 우리는 행 기반 필터링에 익숙합니다. 하지만, 이번에는 항목이 주어진 데이터 유형을 준수하는 Pandas실습 용 DataFrame에서 열 기반 필터링을 수행해 보겠습니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1, True], [“B”, 2, False],
                   [“C”, 3, False], [“D”, 4, True]],
                  columns=[“col_A”, “col_B”, “col_C”])
 
dt_type = “bool” # 데이터 유형
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_C
0 True
1 False
2 False
3 True
“””

해결방안
여기에서 select_dtypes() 메서드를 사용하고 아래와 같이 필터링해야 하는 데이터 유형을 전달할 수 있습니다.

output_df = df.select_dtypes(include = dt_type)
output_df

 col_C
0True
1False
2False
3True


Pandas실습 4. 각 열에 대해 NaN이 아닌 셀 수 계산

다음으로 하나 이상의 열에 NaN 값이 포함된 DataFrame이 있으면 각 열에 대해 NaN이 아닌 셀 수를 출력해 보고자 합니다.

import pandas as pd
import numpy as np
 
df = pd.DataFrame([[“A”, np.NaN], [np.NaN, 2],
                   [“C”, np.NaN], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
“””
col_Acol_B
0 A NaN
1 NaN 2.0
2 C NaN
3 D 4.0
“””
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_A    3
col_B    2
“””

해결방안
여기에서 count() 메서드를 사용하여 결과를 얻을 수 있습니다. 이것은 아래와 같습니다.

df.count()

col_A    3
col_B    2
dtype: int64


Pandas실습 5. DataFrame을 동일한 부분으로 분할

DataFrame이 주어지면 DataFrame을 주어진 수의 동일한 부분으로 분할하는 작업입니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
parts = 2 #분할 수 정의
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
 
“””
col_Acol_B
0 A 1
1 B 2
“””

여기서는 NumPy의 split() 메서드를 사용하고 아래와 같이 분할 수를 인수로 전달합니다.

out_df1, out_df2 = np.split(df, parts)
out_df1

 col_Acol_B
0A1
1B2




Pandas실습 6. DataFrame을 행 방향 또는 열 방향으로 뒤집기

다음으로 위에서 사용한 것과 동일한 DataFrame이 있습니다. 전체 DataFrame을 행 방향 또는 열 방향으로 뒤집고자 한다면, 어떻게 해야 할까요?

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_Bcol_A
0 1 A
1 2 B
2 3 C
3 4 D
“””

해결방안
아래와 같이 loc(또는 iloc)을 사용하고 “::-1″을 사용하여 역인덱싱 방법을 지정할 수 있습니다.

col_reverse = df.loc[:, ::-1]
col_reverse

 col_Bcol_A
01A
12B
23C
34D

row_reverse = df.loc[::-1]
row_reverse

 col_Acol_B
3D4
2C3
1B2
0A1


Pandas실습 7. DataFrame의 열 재정렬

예시 DataFrame과 DataFrame에 열이 표시되는 순서를 지정하는 리스트가 아래와 같이 있습니다. 리스트와 DataFrame이 주어지면 리스트에 지정된 순서대로 열을 출력해 보겠습니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2],
                   [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
rearrange_order = [1,0] # 컬럼의 순서 정의
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_Bcol_A
0 1 A
1 2 B
2 3 C
3 4 D
“””

해결방안
위와 유사하게 iloc을 사용하여 모든 행을 선택하고 아래와 같이 리스트에 주어진 열의 순서를 지정할 수 있습니다.

output_df = df.iloc[:, rearrange_order]
output_df

 col_Bcol_A
01A
12B
23C
34D


Pandas실습 8. DataFrame의 대체 행 가져오기

다음으로 DataFrame이 주어지면 DataFrame의 첫 번째 행부터 시작하여 모든 대체 행을 출력해야 합니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2],
                   [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_Bcol_A
0 1 A
2 3 C
“””
 col_Acol_B
0A1
2C3


Pandas실습 9. 임의의 위치에 행 삽입

앞선 예시와 동일한 DataFrame을 사용하겠습니다. DataFrame의 특정 인덱스에 지정된 리스트를 삽입하고 인덱스를 재할당하는 것입니다.

import pandas as pd
 
df = pd.DataFrame([[“A”, 1], [“B”, 2], [“C”, 3], [“D”, 4]],
                  columns=[“col_A”, “col_B”])
 
insert_pos = 1
insert_row = [“P”, 5]
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_Acol_B
0 A 1
1 P 5
2 B 2
3 C 3
4 D 4
“””

삽입 위치가 주어지면 먼저 주어진 인덱스와 그 이전 인덱스 사이의 인덱스에 새 행을 할당합니다. 이것이 할당문이 할 일입니다. 다음으로 인덱스에서 DataFrame을 정렬합니다. 마지막으로 인덱스를 재할당하여 float 기반 인덱스 값을 제거합니다.

df.loc[insert_pos – 0.1] = insert_row
df

  col_A col_B
0.0 A 1
1.0 B 2
2.0 C 3
3.0 D 4
0.9 P 5

df = df.sort_index()
df

col_A col_B
0.0 A 1
0.9 P 5
1.0 B 2
2.0 C 3
3.0 D 4
 

df = df.reset_index(drop = True)
df

 col_Acol_B
0A1
1P5
2B2
3C3
4D4


Pandas실습 10. DataFrame의 모든 셀에 함 적용

마지막으로 주어진 함수를 DataFrame 전체에 적용해 보겠습니다. 주어진 DataFrame은 정수 값으로만 구성되어 있습니다. 함수를 통해 각 항목을 1씩 증가시켜 보겠습니다.

import pandas as pd
 
df = pd.DataFrame([[1, 5], [2, 6], [3, 7], [4, 8]],
                  columns=[“col_A”, “col_B”])
 
def func(num):
    return num + 1
 
# 아래의 결과값이 출력되도록 코드를 작성할려면?
“””
col_Acol_B
0 2 6
1 3 7
2 4 8
3 5 9
“””

해결방안
여기서는 apply() 메서드를 사용하는 대신 아래와 같이 applymap() 메서드를 사용합니다.

df.applymap(func)

  col_A col_B
0 2 6
1 3 7
2 4 8
3 5 9

이것으로 Part1을 마치겠습니다. 다음 포스팅에서 이어서 설명해 드리겠습니다.
감사합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다