728x90
    
    
  SMALL
    - 오늘은 Pandas 라이브러리에 대한 전반적인 이론을 배운 뒤, 주요 함수 및 Pandas에서 제공하는 Series, DataFrame을 가지고 여러 실습을 진행했습니다.
🐼 Pandas
- Pandas는 파이썬에서 가장 주로 사용되는 외부 라이브러리입니다.
- 해당 라이브러리는 1차원 데이터를 다루는 데 효과적인 Series와, 행과 열로 구성된 2차원 데이터인 DataFrame을 제공합니다.
✨ Pandas의 특징
- 빠르고 효율적인 표현이 가능하고, 실세계 데이터 표현에 용이합니다.
- 다양한 형태의 데이터(시계열 / 레이블을 가진 데이터, 다양한 관측 데이터 등)들을 표현 가능합니다.
- Series는 1차원, DataFrame은 2차원(행렬) 데이터에 특화되어 있습니다.
- 결측 데이터 처리, 데이터 추가 및 삭제, 데이터 정렬과 조작을 쉽게 진행할 수 있습니다.
✨ Pandas로 가능한 일들
- 기본 자료구조(리스트, 딕셔너리, Numpy 배열 등)를 DataFrame처럼 만들 수 있습니다.
- CSV / XLS 등의 외부 파일을 열어 작업할 수 있습니다.
- URL을 통한 웹 사이트의 CSV, json과 같은 원격 데이터나 데이터베이스를 다룰 수 있습니다.
- 데이터 보기 / 검사 기능을 제공하는데, 예를 들어 특정 열의 평균을 보기 위한 mean() 함수나, 상관 계수를 확인할 수 있는 corr() 함수 등이 있습니다.
- 데이터의 정제 기능을 제공해줍니다. 예를 들어, 누락된 데이터를 관리해주거나 특정 값을 다른 값으로 일괄 변경이 가능합니다.
✨ Series
- Series 객체 생성 시, 별도의 index를 부여하지 않으면 0으로 시작하는 정수들로 index가 부여됩니다.
- 데이터를 선택할 때에는 index를 이용해 추출할 수 있습니다.
- Series끼리의 연산도 가능하고, 이때 같은 index의 데이터끼리 연산이 수행됩니다.
✨ DataFrame
- DataFrame은 Series들이 모인 자료 구조입니다.
- 그래서 DataFrame의 컬럼은 Series 형태(<class 'pandas.core.series.Series'>)인데, 여기서 언급되는 pandas.core는 아래에서 설명드리겠습니다.
 
- DataFrame은 주로 딕셔너리를 사용하여 생성됩니다.
- 딕셔너리를 통해 각 컬럼에 대한 데이터를 저장 후, 생성자(DataFrame())에게 전달하는 방식으로 생성됩니다.
 
- 딕셔너리를 이용해 DataFrame 객체를 생성하면 딕셔너리의 key가 DataFrame의 컬럼명으로 자동적으로 인덱싱됩니다.
- 또한, value에 해당하는 row에는 리스트처럼 0부터 시작하는 정수로 인덱싱됩니다.
- DataFrame의 컬럼명이나 인덱스를 별도로 설정하려면 옵션으로 ‘columns=리스트’ / ‘index=리스트’를 설정해야 합니다.
- index, column, value를 확인하고 싶을 때에는 DataFrame.index, DataFrame.columns, DataFrame.values을 사용해 출력되는 값을 확인합니다.
- DataFrame의 전반적인 정보를 확인하고 싶다면 DataFrame.info() 함수를 사용하는데, 이는 결측값(null 값)을 간단하게 확인할 때에도 사용됩니다.
- DataFrame의 기본 통계 요약을 살펴보기 위해서는 DataFrame.describe() 함수를 사용합니다.
✨ pandas.core의 의미
- pandas.core는 Pandas 라이브러리의 핵심 모듈 즉, pandas의 내부 구현을 담당하는 핵심 코드들이 포함된 모듈 및 패키지의 네임스페이스입니다.
- pandas.core.frame(DataFrame 관련 기능), pandas.core.series(Series 관련 기능), pandas.core.indexes(Index 관련 기능) 등이 포함됩니다.
- 따라서 에러 메시지에 pandas.core가 포함된 경우, Pandas 내부 문제일 가능성이 큽니다.
✨ DataFrame에서 데이터 추출 방법
- DataFrame은 여러 방법으로 데이터를 추출하고 확인할 수 있는데, 우선 대표적인 방법 5가지만 알려드리겠습니다.
- 컬럼명으로 추출하는 방법 (e.g. df['col'])
- 인덱스를 통한 슬라이싱 작업으로 추출하는 방법 (e.g. df[:3])
- 이 방법은 내부 인덱스, 자기가 만든 인덱스 둘 다 모두 추출이 가능합니다.
 
- DataFrame의 컬럼명과 인덱스로 데이터를 추출하는 방법 (e.g. df.loc['250201':'250203', ['A', 'B']])
- 다수의 컬럼명으로 데이터를 추출할 경우에는 컬럼명들을 리스트 형태로 설정해야 합니다.
 
- DataFrame의 컬럼 값을 조건을 주어 비교 추출하는 방법 (e.g. df[df.A > 0])
- 특정 열에 대한 행을 추출하는 방법 (e.g. df['A'][:3])
📌 Pandas의 주요 함수
✨ pandas.date_range(start=None, end=None, periods=None)
- start 매개변수의 입력값부터 시작해 periods 만큼의 데이터를 생성해주는 함수입니다.
✨ DataFrame.head(n=5), DataFrame.tail(n=5)
- 해당 DataFrame의 상위, 하위의 일부 데이터만 추출할 수 있는 함수입니다.
- 외부 데이터가 잘 들어왔는지 체크! 할 때 주로 사용되는 함수이고,
- 정렬 시에도 상위, 하위 일부 데이터만 선택할 수 있는 기능을 가지고 있습니다.
✨ DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, ignore_index=False)
- 특정 컬럼을 기준으로 DataFrame을 정렬시켜주는 함수입니다.
- by 옵션에는 기준 컬럼을 정해주고, 오름/내림차순과 관련해서는 ascending 옵션에 True/False로 설정이 가능합니다.
✨ DataFrame.copy(deep=True)
- 기존 DataFrame을 수정하지 않고 복사해야 할 때 사용되는 함수입니다.
- 이 복사된 DataFrame에 새로운 컬럼과 데이터를 추가하려면 DataFrame['새로운 컬럼명'] = ['신규 데이터들']과 같이 설정해주시면 되겠습니다.
✨ DataFrame.isin(values)
- DataFrame의 특정 컬럼에 지정한 데이터가 포함되어 있는지 확인해주는 함수입니다.
- 데이터가 있으면 True, 없으면 False를 반환합니다.
✨ pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None)
- DataFrame들을 순서대로 연결해 새로운 DataFrame을 생성하는 함수입니다.
- 연결하는 DataFrame들 간의 공통된 행과 열이 일부 존재하지 않는 경우, 해당 데이터는 nan 값으로 자동 설정됩니다.
- axis는 기본값인 0으로 고정되어 있으며, 이때는 DataFrame들이 행 기준(아래쪽)으로 연결됩니다.
- axis=1로 설정하게 되면 열 기준(오른쪽)으로 연결됩니다.
 
- 공통 index 번호끼리만 연결을 원할 경우 join을 'inner'로 설정하시면 됩니다. (실제 SQL에서의 inner join 방식)
- 연결하게 되면 index 번호가 들쭉날쭉할 수 있기 때문에 이럴 땐 ignore_index를 True로 설정하여 기존 인덱스를 무시하고 인덱스를 다시 설정하시면 보기 편해집니다. 👍🏻
- 연결 시 keys 옵션에 키 리스트를 나열해 부여해주면, 합쳐진 DataFrame들을 구분할 수 있습니다. 
- 전달된 키를 가장 바깥쪽 레벨로 사용해 또 다른 인덱스가 구성됩니다.
 
✨ DataFrame.merge(right, how='inner', on=None)
- on에 설정되어 있는 기준 컬럼을 기준으로 DataFrame들을 병합해주는 함수입니다.
- how에는 병합 방식을 설정할 수 있는데 이는 SQL의 join 방식과 동일하게 설정해주시면 됩니다.
- 'left', 'right', 'outer', 'inner', 'cross'가 제공되며 각각 left join, right join, outer join, inner join, 카테시안 곱을 의미합니다.
- 기본값은 inner로, 이는 교집합에 해당하는 DataFrame을 생성해주는 속성입니다.
 
✨ pandas.read_csv(filepath_or_buffer, delimiter=None, index_col=None, encoding=None)
- index 지정없이 파일을 읽을 경우, 파일의 첫 번째 행을 각 Series의 열 이름으로 자동 설정됩니다.
- 각 레코드에 대한 index는 0으로 시작하는 정수로 자동 생성되고,
- index_col에 index로 지정할 열의 번호를 지정하면 해당 index로 파일을 읽어오게 됩니다.
 
'UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte'와 같은 encoding 오류가 발생할 경우, 데이터에 한글이 포함되어 있기 때문에 encoding 방식을 'utf-8', 'euc-kr', 'cp949' 등으로 설정하셔야 합니다.
✨ class pandas.DatetimeIndex(data=None)
- '2025-02-05'와 같이 날짜를 나타내는 문자열을 pandas에서 제공하는 Datetime 형으로 변환해주는 클래스입니다.
- 'weather['month'] = pd.DatetimeIndex(weather['일시']).month'와 같이 속성을 추가로 입력하면 해당 속성만 반환하게 됩니다.
✨ DataFrame.rename(index=None, columns=None, axis=None, inplace=False)
- 인덱스나 컬럼명을 바꾸기 위해 사용되는 함수입니다.
- 실제 DataFrame에 바로 적용하기 위해 inplace 값을 True로 전달하시면 됩니다.
🤔 7일차 회고
- 오늘은 Pandas 라이브러리의 자료 구조, 주요 내용과 함수들을 비롯하여 Numpy, Matplotlib 라이브러리를 통한 CCTV 데이터 시각화까지 진행해보았습니다.
- Numpy나 Matplotlib 라이브러리는 오늘 간단하게만 다뤄보긴 했지만, Pandas와 함께 정말 중요한 라이브러리들이라 추후에도 계속적으로 실습을 통해 익힐 것 같습니다.
- 저는 사실 Pandas를 자주 다뤘던 사람이기에 실습적인 측면에서는 어렵지 않았으나 함수 하나하나를 Pandas docs를 통해 이렇게 세부적으로 들여다본 적은 처음이라 더 공부하고 싶다는 생각이 들었던 오늘인 것 같습니다!
- 내일은 이어서 Matplotlib 라이브러리를 더 뜯어보며 시각화를 계속 진행할 예정입니다.
728x90
    
    
  LIST
    '부트캠프 > LG U+' 카테고리의 다른 글
| 🤔 Numpy와 Seaborn 그리고 또다시...각화 (0) | 2025.02.07 | 
|---|---|
| 🤔 Matplotlib을 활용한 본격적인 시각화 (2) | 2025.02.06 | 
| 🤔 함수와 모듈 그리고 클래스 (15) | 2025.02.04 | 
| 🤔 Python Programming Basics (w. Spyder) (2) | 2025.02.03 | 
| 🤔 Jupyter, folium 그리고 tkinter (2) | 2025.01.24 | 
