인공지능 요모조모
[Python3] 딥러닝 파이썬 패키지(1) Pandas 본문
반응형
# ROKEY 3기 Python 강의 복습 겸 기록용으로 남기는 글입니다.
: 데이터 분석과 조작을 위한 파이썬 라이브러리
- 다양한 파일 형식에서 데이터를 읽고 원하는 데이터 형식으로 변환
- 👉🏻쉼표로 구분된 값(CSV), JSON, SQL, MS Excel, ...
- 설치 → pip install pandas
- import → import pandas as pd
1️⃣ 주요 자료구조
(1) Series
: 1차원 배열, 라벨이 있는 데이터
✅ 방법1) list 데이터를 사용한 객체 생성
👉🏻 인덱스 지정X → 0부터 시작하는 정수 값으로 기본 인덱싱
import pandas as pd
data = [10, 20, 30]
series = pd.Series(data)
print(series)
✅ 방법2) 딕셔너리 데이터를 사용한 객체 생성
👉🏻 key를 인덱스 값으로 사용
import pandas as pd
data = {'a': 10, 'b': 20, 'c': 30}
series = pd.Series(data)
print(series)
(2) DataFrame
: 2차원 테이블 구조, 라벨이 있는 행(row)과 열(column)
✅ 방법1) 중첩 리스트 데이터를 사용한 객체 생성
👉🏻 열(column)명을 옵션으로 지정 가능
import pandas as pd
data = [
[1, 'Alice', 30],
[2, 'Bob', 35],
[3, 'Charlie', 25]
]
df = pd.DataFrame(data, columns=['ID', 'Name', 'Age'])
print(df)
✅ 방법2) 딕셔너리 데이터를 사용한 객체 생성
👉🏻 key를 열(column)명으로 사용
import pandas as pd
data = {
'ID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [30, 35, 25]
}
df = pd.DataFrame(data)
print(df)
2️⃣ 파일 데이터
✅ CSV 파일 구조
- 줄 바꿈(enter)으로 구분되는 1개 이상의 행으로 구성
- 각 행은 1개 이상의 열(=필드)로 구성
- 필드는 큰따옴표로 둘러싸도 됨 (단, 형식 통일 필요)
✅ CSV 파일 기본 생성
- 텍스트 에디터(ex. 메모장)에 아래와 같이 작성 후 확장자를 (.csv)로 저장
# ch19/data.csv
ID,이름,가격
1,비누,300
2,장갑,150
3,마스크,230
4,손수건,400
5,볼펜,200
6,건전지,250
✅ CSV 파일 읽기
👉🏻 df_csv = pd.read_csv('C:/rokey/ch19/data.csv')
import pandas as pd
df_csv = pd.read_csv('C:/rokey/ch19/data.csv')
print(df_csv)
print(type(df_csv))
✅ Excel 파일 구조
- 파일을 북(book)이라고 함
- 하나의 북 내부에는 여러 개의 시트(sheet)가 존재
- 각 시트는 행(row)와 열(column)을 가진 2차원 셀(cell)로 구성
✅ Excel 파일 기본 생성
- MS 엑셀 프로그램을 통한 생성
✅ Excel 파일 읽기
- openpyxl 모듈 추가 설치 → pip install openpyxl
- 👉🏻 df_xl = pd.read_excel('C:/rokey/ch19/data.xlsx')
import pandas as pd
df_xl = pd.read_excel('C:/rokey/ch19/data.xlsx')
3️⃣ 데이터 탐색
print(df.head()) # 상위 5개 행 보기
print(df.tail()) # 하위 5개 행 보기
print(df.info()) # 데이터 요약 정보
print(df.describe()) # 기술 통계(ex. count, mean, std, min, ...)
4️⃣ 데이터 활용
print(df.sample(2)) # 랜덤 샘플링
print(df.sample(frac=0.5)) # 특정 비율(50%)로 샘플링
5️⃣ 데이터 조작
print(df['Name']) # 열 선택
# 조건 필터링
filtered = df[df['Age'] > 30]
print(filtered)
# 값으로 정렬
sorted_df = df.sort_values(by='Age')
print(sorted_df)
# 데이터 추가 및 삭제: 열 추가
df['Salary'] = [50000, 60000, 70000]
print(df)
# 데이터 추가 및 삭제: 행 추가
df.loc[len(df)] = [54, 'David', 40, 80000]
print(df)
# 데이터 추가 및 삭제: 행 삭제
df= df.drop(1) # 1번 인덱스 행 삭제
print(df)
6️⃣ 데이터 처리
import pandas as pd
# 데이터 연결(concat())
data2 = {
'ID': [5, 6],
'Name': ['Eve', 'Frank'],
'Age': [28, 33]
}
df2 = pd.DataFrame(data2)
concated = pd.concat([df, df2])
print(concated)
# 데이터 병합(merge())
data3 = {
'ID': [1, 2, 3, 4, 5, 6],
'Name': ['HR', 'Engineering', 'Sales', 'R&D', 'Finance', 'Planning']
}
df3 = pd.DataFrame(data3)
merged = pd.merge(concated , df3)
print(merged)
# 결측치 확인(isnull())
print(df.isnull().sum())
# 결측치 채우기(fillna(채울 값))
meanVal = merged['Salary'].mean()
merged['Salary'] = merged['Salary'].fillna(meanVal)
print(merged)
# 중복 데이터 확인(duplicated())
data1 = {
'ID': [1, 3],
'Name': ['Alice', 'Charlie'],
'Age': [30, 25],
'Salary': [50000, 70000],
'Department': ['HR', 'Sales']
}
df1 = pd.DataFrame(data1)
df1 = pd.concat([merged, df1])
print(df1)
print(df1.duplicated())
# 중복 데이터 제거(drop_duplicates())
df1_1 = df1.drop_duplicates()
print(df1_1)
✅ NaN(Not a Number)
- 결측값(NA)에 대한 표현
- 정의되지 않은 값 / 표현할 수 없는 값 / 누락된 값
- 값이 없는 경우 None으로 데이터 입력 가능
반응형
'ROKEY > Python3' 카테고리의 다른 글
[Python3] 딥러닝 파이썬 패키지(2) Numpy (0) | 2025.02.05 |
---|---|
[Python3] 알고리즘 - 그래프(Graph) (0) | 2025.02.04 |
[Python3] 변수와 복사(shallow copy, deep copy) (0) | 2025.02.04 |