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_A | Col_B | |
---|---|---|
2 | C | 3 |
3 | D | 4 |
1 | B | 2 |
0 | A | 1 |
Pandas실습 2. DataFrame의 특정 위치에 열 삽입
위에서 사용한 Pandas실습 용 DataFrame을 계속 이용하겠습니다. 그리고, 크기가 지정된 DataFrame의 행 수와 동일한 리스트가 있습니다. 작업은 DataFrame의 지정된 위치에 지정된 리스트를 새 열로 삽입하는 것입니다.
해결방안
여기에서 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에서 열 기반 필터링을 수행해 보겠습니다.
해결방안
여기에서 select_dtypes() 메서드를 사용하고 아래와 같이 필터링해야 하는 데이터 유형을 전달할 수 있습니다.
output_df = df.select_dtypes(include = dt_type)
output_df
col_C | |
---|---|
0 | True |
1 | False |
2 | False |
3 | True |
Pandas실습 4. 각 열에 대해 NaN이 아닌 셀 수 계산
다음으로 하나 이상의 열에 NaN 값이 포함된 DataFrame이 있으면 각 열에 대해 NaN이 아닌 셀 수를 출력해 보고자 합니다.
해결방안
여기에서 count() 메서드를 사용하여 결과를 얻을 수 있습니다. 이것은 아래와 같습니다.
df.count()
col_A 3 col_B 2 dtype: int64
Pandas실습 5. DataFrame을 동일한 부분으로 분할
DataFrame이 주어지면 DataFrame을 주어진 수의 동일한 부분으로 분할하는 작업입니다.
여기서는 NumPy의 split() 메서드를 사용하고 아래와 같이 분할 수를 인수로 전달합니다.
out_df1, out_df2 = np.split(df, parts)
out_df1
col_A | col_B | |
---|---|---|
0 | A | 1 |
1 | B | 2 |
Pandas실습 6. DataFrame을 행 방향 또는 열 방향으로 뒤집기
다음으로 위에서 사용한 것과 동일한 DataFrame이 있습니다. 전체 DataFrame을 행 방향 또는 열 방향으로 뒤집고자 한다면, 어떻게 해야 할까요?
해결방안
아래와 같이 loc(또는 iloc)을 사용하고 “::-1″을 사용하여 역인덱싱 방법을 지정할 수 있습니다.
col_reverse = df.loc[:, ::-1]
col_reverse
col_B | col_A | |
---|---|---|
0 | 1 | A |
1 | 2 | B |
2 | 3 | C |
3 | 4 | D |
row_reverse = df.loc[::-1]
row_reverse
col_A | col_B | |
---|---|---|
3 | D | 4 |
2 | C | 3 |
1 | B | 2 |
0 | A | 1 |
Pandas실습 7. DataFrame의 열 재정렬
예시 DataFrame과 DataFrame에 열이 표시되는 순서를 지정하는 리스트가 아래와 같이 있습니다. 리스트와 DataFrame이 주어지면 리스트에 지정된 순서대로 열을 출력해 보겠습니다.
해결방안
위와 유사하게 iloc을 사용하여 모든 행을 선택하고 아래와 같이 리스트에 주어진 열의 순서를 지정할 수 있습니다.
output_df = df.iloc[:, rearrange_order]
output_df
col_B | col_A | |
---|---|---|
0 | 1 | A |
1 | 2 | B |
2 | 3 | C |
3 | 4 | D |
Pandas실습 8. DataFrame의 대체 행 가져오기
다음으로 DataFrame이 주어지면 DataFrame의 첫 번째 행부터 시작하여 모든 대체 행을 출력해야 합니다.
col_A | col_B | |
---|---|---|
0 | A | 1 |
2 | C | 3 |
Pandas실습 9. 임의의 위치에 행 삽입
앞선 예시와 동일한 DataFrame을 사용하겠습니다. DataFrame의 특정 인덱스에 지정된 리스트를 삽입하고 인덱스를 재할당하는 것입니다.
삽입 위치가 주어지면 먼저 주어진 인덱스와 그 이전 인덱스 사이의 인덱스에 새 행을 할당합니다. 이것이 할당문이 할 일입니다. 다음으로 인덱스에서 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
df = df.reset_index(drop = True)
df
col_A | col_B | |
---|---|---|
0 | A | 1 |
1 | P | 5 |
2 | B | 2 |
3 | C | 3 |
4 | D | 4 |
Pandas실습 10. DataFrame의 모든 셀에 함 적용
마지막으로 주어진 함수를 DataFrame 전체에 적용해 보겠습니다. 주어진 DataFrame은 정수 값으로만 구성되어 있습니다. 함수를 통해 각 항목을 1씩 증가시켜 보겠습니다.
해결방안
여기서는 apply() 메서드를 사용하는 대신 아래와 같이 applymap() 메서드를 사용합니다.
df.applymap(func)
col_A | col_B | |
---|---|---|
0 | 2 | 6 |
1 | 3 | 7 |
2 | 4 | 8 |
3 | 5 | 9 |
이것으로 Part1을 마치겠습니다. 다음 포스팅에서 이어서 설명해 드리겠습니다.
감사합니다!