pandas
파이썬에서 데이터 분석/처리를 위한 라이브러리로, 엑셀, DB 테이블과 같은 구조적 데이터를 다루기 최적화.
* 기본구조
- Series (1차원)
- DataFrame(2차원)
Series (1차원 데이터)
리스트나 배열을 pandas 형식으로 감싼 형태로, 인덱스(index)와 값(value)으로 구성
import pandas as pd
# 리스트 -> Series 변환
data = [10, 20, 30, 40]
s = pd.Series(data)
print(s)
(출력결과)
0 10
1 20
2 30
3 40
dtype: int64
=> 기본 index 자동 지정.
* 인덱스 지정
s = pd.Series([10, 20, 30], index=["a", "b", "c"])
print(s)
(출력결과)
a 10
b 20
c 30
dtype: int64
( key–value 형태로 데이터 추출 가능)
print(s["a"]) # 10
print(s["c"]) # 30
* 기본 연산
s = pd.Series([10, 20, 30])
print(s + 5) # 모든 값에 5 더하기
(출력결과)
0 15
1 25
2 35
dtype: int64
* 통계 함수
s = pd.Series([10, 20, 30])
# 평균값
print(s.mean()) # 20.0
# 최대값
print(s.max()) # 30
DataFrame (2차원 데이터 - 행 X 열)
엑셀 시트, SQL 테이블 같은 형태.
내부적으로는 여러 개의 Series가 모여서 만든 구조.
import pandas as pd
data = {
"name": ["A", "B", "C"],
"age": [23, 25, 21],
"score": [85, 90, 95]
}
df = pd.DataFrame(data)
print(df)
(출력결과)
name age score
0 A 23 85
1 B 25 90
2 C 21 95
* 인덱스 지정
df = pd.DataFrame(data, index=["x", "y", "z"])
print(df)
(출력결과)
name age score
x A 23 85
y B 25 90
z C 21 95
* 열(column) 접근
print(df["age"]) # 특정 열 접근 → Series
(출력결과)
age
x 23
y 25
z 21
print(df[["name","score"]]) # 여러 열 접근 → DataFrame
(출력결과)
name score
x A 85
y B 90
z C 95
* 행(row) 접근
print(df.loc["y"]) # 인덱스명으로 접근
(출력결과)
name B
age 25
score 90
Name: y, dtype: object
print(df.iloc[1]) # 행 번호로 접근
(출력결과)
name B
age 25
score 90
Name: y, dtype: object
* 통계 함수
# 평균 점수
print(df["score"].mean()) # 90.0
# 나이 최댓값
print(df["age"].max()) # 25
# 기초 통계 요약
print(df.describe())
(출력결과)
age score
count 3.0 3.0
mean 23.0 90.0
std 2.0 5.0
min 21.0 85.0
25% 22.0 87.5
50% 23.0 90.0
75% 24.0 92.5
max 25.0 95.0
활용
import pandas as pd
data = {
"name": ["A", "B", "C", "D", "E", "F"],
"score": [90, 85, 90, 95, 85, 90]
}
df = pd.DataFrame(data)
print(df)
(출력결과)
name score
0 A 90
1 B 85
2 C 90
3 D 95
4 E 85
5 F 90
(1) score별 이름 갯수 ( group by + count )
result = df.groupby("score")["name"].count()
print(result)
(출력결과)
score
85 2
90 3
95 1
Name: name, dtype: int64
(2) score별 이름 갯수 (value_counts)
print(df["score"].value_counts())
(출력결과)
90 3
85 2
95 1
Name: score, dtype: int64
(3) score별 이름 리스트
result = df.groupby("score")["name"].apply(list)
print(result)
or
result = df.groupby("score").agg({"name": list})
print(result)
(출력결과)
score
85 [B, E]
90 [A, C, F]
95 [D]
Name: name, dtype: object
(4) score갯수를 조건으로 이름 리스트 출력 ( group by + filter )
result = df.groupby("score").filter(lambda x: len(x) > 2)
print(result)
(출력결과)
name score
0 A 90
1 B 85
2 C 90
4 E 85
5 F 90
(5)score갯수를 조건으로 이름 리스트 출력 ( value_counts )
counts = df["score"].value_counts()
result = df[df["score"].isin(counts[counts >= 2].index)]
print(result)
(출력결과)
name score
0 A 90
1 B 85
2 C 90
4 E 85
5 F 90
(6)score갯수를 조건으로 이름 리스트 출력 ( groupby + apply )
result = df.groupby("score")["name"].apply(list)
result = result[result.apply(len) >= 2]
print(result)
(출력결과)
score
85 [B, E]
90 [A, C, F]
Name: name, dtype: object
* 위의 name들을 통합하여 리스트로 추출하기
(1) extend
result = df.groupby("score")["name"].apply(list)
result = result[result.apply(len) >= 2]
name_list = []
for names in result:
name_list.extend(names)
print(name_list) # ['B', 'E', 'A', 'C', 'F']
(2) List Comprension
result = df.groupby("score")["name"].apply(list)
result = result[result.apply(len) >= 2]
name_list = [n for names in result for n in names]
print(name_list) # ['B', 'E', 'A', 'C', 'F']
(3) itertools.chain
result = df.groupby("score")["name"].apply(list)
result = result[result.apply(len) >= 2]
name_list = list(chain.from_iterable(result))
print(name_list) # ['B', 'E', 'A', 'C', 'F']
Pandas 관련 참고
https://digital-play.tistory.com/31
파이썬 Pandas를 알기 위해서는 Series부터 이해하자.
파이썬 Pandas를 다루기 전에 오늘은 Pandas의 기본이 되는 Pandas Series에 대해서 알아봅시다. Pandas Series는 인덱싱된 데이터의 1 차원 배열입니다. Numpy(Numerical Python)와 다른 점은 Numpy는 명시적 인덱스
digital-play.tistory.com
'Python > 공부공부' 카테고리의 다른 글
| [python] 날짜&시간 연산 (datetime, timedelta, strptime, strftime) (0) | 2025.10.15 |
|---|---|
| [Python] collections.Counter (0) | 2025.09.08 |
| [Python] PYTHONPATH 설정, __init__.py 파일, 실행명령어 (0) | 2025.09.04 |
| [Python] SQLAlchemy 업서트(upsert) - PostgreSQL (0) | 2025.09.01 |
| [Python] SQLAlchemy 라이브러리 (0) | 2025.09.01 |