Pandas1

지두의 개발자 도전기·2025년 3월 10일

Pandas

목록 보기
1/9
post-thumbnail

판다스 라이브러리 기본 설정

  • 판다스(Pandas)는 데이터 분석 및 조작을 위한 파이썬 라이브러리로, 데이터프레임(DataFrame)과 시리즈(Series) 구조를 제공함.
  • 데이터 처리, 정제, 변환, 분석 기능을 손쉽게 수행할 수 있음.
import pandas as pd

시리즈

1. 시리즈(Series) 기본 개념

  • 시리즈는 1차원 데이터 구조이며, 인덱스(라벨)와 값을 가짐.
  • 리스트, 넘파이 배열, 딕셔너리 등을 이용하여 생성 가능함.
  • 데이터프레임과 달리 단일 열로 구성된 데이터 구조임.

1-1. 시리즈 생성 및 인덱스 설정

(1) 리스트 또는 넘파이 배열을 활용한 생성

import numpy as np

# 리스트를 이용한 시리즈 생성
s1 = pd.Series([10, 20, 30, 40])
print(s1)
# 0    10
# 1    20
# 2    30
# 3    40
# dtype: int64
# 넘파이 배열을 이용한 시리즈 생성
arr = np.array([100, 200, 300])
s2 = pd.Series(arr)
print(s2)
# 0    100
# 1    200
# 2    300
# dtype: int64

(2) 딕셔너리를 활용한 생성

# 딕셔너리를 이용한 시리즈 생성 (Key가 인덱스로 설정됨)
s3 = pd.Series({'a': 10, 'b': 20, 'c': 30})
print(s3)
# a    10
# b    20
# c    30
# dtype: int64

2. 시리즈 주요 속성

  • .values: 시리즈의 값(ndarray) 반환
  • .index: 시리즈의 인덱스(Index 객체) 반환
  • .name: 시리즈의 이름 설정 및 반환
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'], name='Sample Series')
print(s.values)
# [1 2 3]
print(s.index)
# Index(['a', 'b', 'c'], dtype='object')
print(s.name)
# Sample Series

3. 시리즈에서 in 연산자 활용

  • 특정 인덱스가 존재하는지 확인 가능함.
  • 값(value)으로 확인할 때는 .values를 활용해야 함.
print('a' in s)
# True (인덱스에 존재)
print('d' in s)
# False (인덱스에 없음)
print(2 in s.values)
# True (값에 존재)

4. Index 객체

  • 시리즈의 .index는 Index 객체로 저장되며, 직접 수정이 불가능함 (Immutable 속성)
  • 데이터프레임에서도 동일한 원리가 적용됨.
  • 직접 변경하려면 list()로 변환 후 수정하거나, reindex()를 사용해야 함.
s.index[0] = 'x'  # TypeError 발생 (Index 객체는 변경 불가)

5. 시리즈 재색인 (Reindex)

  • reindex()를 사용하여 새로운 인덱스를 지정할 수 있음.
  • 기존에 없는 인덱스에는 결측치(NaN)가 자동 추가됨.
s_reindexed = s.reindex(['a', 'b', 'c', 'd'])
print(s_reindexed)
# a    1.0
# b    2.0
# c    3.0
# d    NaN
# dtype: float64

5-1. 결측치 처리 옵션

  • method 키워드: 보간(interpolation) 방식 지정 (ffill: 이전 값 채우기, bfill: 이후 값 채우기)
  • fill_value 키워드: 특정 값으로 채움
  • nearest: 가장 가까운 값으로 대체
# fill_value를 이용하여 결측값을 0으로 대체
s_filled = s.reindex(['a', 'b', 'c', 'd'], fill_value=0)
print(s_filled)
# a    1
# b    2
# c    3
# d    0
# dtype: int64
# method='ffill'을 사용하여 이전 값으로 채움
s_ffill = s.reindex(['a', 'b', 'c', 'd'], method='ffill')
print(s_ffill)
# a    1.0
# b    2.0
# c    3.0
# d    3.0  # 이전 값(c=3)이 채워짐
# dtype: float64
# method='bfill'을 사용하여 이후 값으로 채움
s_bfill = s.reindex(['a', 'b', 'c', 'd'], method='bfill')
print(s_bfill)
# a    1.0
# b    2.0
# c    3.0
# d    NaN  # 이후 값이 없어서 NaN 유지
# dtype: float64

데이터프레임

1. 데이터프레임 기본 설명

  • 2차원 배열 형태로 데이터를 행과 열로 다루는 자료구조임.
  • 각 열은 시리즈(Series) 객체로 구성되고, 각 시리즈는 동일한 데이터 타입을 가지지만, 데이터프레임은 열마다 다른 데이터 타입을 가질 수 있음.

2. 데이터프레임 생성

  • pd.concat(): 여러 데이터프레임을 이어 붙일 때 사용. axis=1은 열 기준으로, axis=0은 행 기준으로 결합됨.
    import pandas as pd
    
    df1 = pd.DataFrame({'A': [1, 2]})
    df2 = pd.DataFrame({'B': [3, 4]})
    result = pd.concat([df1, df2], axis=1)  # 열 기준 결합
    
    print(result)
    
    출력:
    
       A  B
    0  1  3
    1  2  4
    
  • 2차원 넘파이 어레이 활용: 넘파이 어레이를 이용해 데이터프레임 생성 가능.
    import numpy as np
    data = np.array([[1, 2], [3, 4]])
    df = pd.DataFrame(data, columns=['A', 'B'])
    
    print(df)
    
    출력:
       A  B
    0  1  2
    1  3  4
    
  • 딕셔너리 활용: 딕셔너리를 사용하여 데이터프레임 생성 가능.
    data = {'A': [1, 2], 'B': [3, 4]}
    df = pd.DataFrame(data)
    
    print(df)
    
    출력:
       A  B
    0  1  3
    1  2  4
    
  • 중첩 딕셔너리 활용: 중첩된 딕셔너리로도 데이터프레임 생성 가능.
    data = {'A': {0: 1, 1: 2}, 'B': {0: 3, 1: 4}}
    df = pd.DataFrame(data)
    
    print(df)
    
    출력:
       A  B
    0  1  3
    1  2  4
    

3. name 속성 & values 속성

  • name 속성: Series 객체의 이름을 설정하거나 가져올 수 있음.
    s = pd.Series([1, 2, 3])
    s.name = 'numbers'
    
    print(s)
    
    출력:
         1
    1    2
    2    3
    Name: numbers, dtype: int64
    
  • values 속성: DataFrame 또는 Series의 값을 ndarray 형태로 반환.
    
    df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
    print(df.values)
    
    출력:
    [[1 3]
     [2 4]]
    

4. columns 속성

  • columns 속성: 데이터프레임의 열 이름을 확인하거나 변경할 때 사용.

출력:

```python
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.columns)  # 열 이름 확인
df.columns = ['X', 'Y']  # 열 이름 변경
print(df)

```

```

Index(['A', 'B'], dtype='object')
   X  Y
0  1  3
1  2  4

```

5. index 속성

  • index 속성: 데이터프레임의 행 인덱스를 설정하거나 조회할 때 사용.

출력:

```python
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.index)  # 인덱스 확인
df.index = ['a', 'b']  # 인덱스 변경
print(df)

```

```
RangeIndex(start=0, stop=2, step=1)
   A  B
a  1  3
b  2  4

```

6. rename() 메소드

  • rename(): 데이터프레임의 열 이름 또는 행 이름을 변경할 때 사용.

출력:

```python
df = pd.dataFrame({'A': [1, 2], 'B': [3, 4]})
df.rename(columns={'A': 'alpha', 'B': 'beta'}, inplace=True)
print(df)

```

```

   alpha  beta
0      1     3
1      2     4

```

7. in 연산자

  • in 연산자: 데이터프레임의 컬럼명 또는 인덱스에 특정 값이 포함되어 있는지 확인할 때 사용.

출력:

```python

df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print('A' in df.columns)  # 'A' 컬럼이 있는지 확인
print('C' in df.columns)  # 'C' 컬럼이 있는지 확인

```

```
True
False

```

8. index 객체

  • index 객체: 데이터프레임의 인덱스를 나타내는 객체로, 다양한 메소드와 속성 제공.
    df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
    print(df.index)  # 인덱스 객체 확인
    

9. 데이터프레임 리인덱싱과 결측치 처리

  • reindex(): 데이터프레임의 인덱스를 새로 지정하거나 결측치를 처리.
    
    df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
    df_reindexed = df.reindex([0, 1, 2], method='ffill')  # 결측치는 이전 값으로 채움
    print(df_reindexed)
    
    출력:
       A  B
    0  1  3
    1  2  4
    2  2  4
    
  • columns 키워드 인자, method=fill, fill_value: reindex() 메소드에서 결측치를 채우기 위해 사용.
    df_reindexed = df.reindex(columns=['A', 'B', 'C'], fill_value=0)
    print(df_reindexed)
    
    출력:
    
       A  B  C
    0  1  3  0
    1  2  4  0
    

10. 인덱스 초기화: reset_index() 메소드

  • reset_index(): 인덱스를 기본 값으로 초기화하고, 기존 인덱스를 열로 추가.

출력:

```python
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df_reset = df.reset_index()
print(df_reset)

```

```
   index  A  B
0      0  1  3
1      1  2  4

```

11. 문자열 메소드 활용

  • 시리즈, index 자료형에서 문자열 처리: pandas는 문자열 처리에 유용한 메소드들을 제공함.

출력:

```python
df = pd.DataFrame({'A': ['apple', 'banana'], 'B': ['cherry ', ' date']})
df['A'] = df['A'].str.lower()  # 소문자화
df['B'] = df['B'].str.strip()  # 양 끝 공백 제거
df['B'] = df['B'].str.replace(' ', '_')  # 공백을 언더스코어로 대체
print(df)

```

```
       A        B
0  apple   cherry_
1 banana     date

```

12. 데이터셋 불러오기와 저장하기

  • CSV 파일 불러오기:
    
    df = pd.read_csv('data.csv')
    print(df)
    
  • 엑셀 파일 불러오기:
    
    df = pd.read_excel('data.xlsx')
    print(df)
    
  • CSV 파일 저장하기:
    
    df.to_csv('output.csv', index=False)
    
  • 엑셀 파일 저장하기:
    df.to_excel('output.xlsx', index=False)
    

0개의 댓글