
pandas는 데이터 분석과 조작을 위해 설계된 파이썬 라이브러리로, 특히 구조화된 데이터(예: 테이블 형태의 데이터) 처리에 강력하다. pandas는 데이터프레임(DataFrame)이라는 구조를 중심으로 빠르고 직관적인 데이터 처리 및 분석을 지원한다.
pandas는 매우 잘 정리된 공식 문서를 제공한다. 문서에는 함수별 설명, 예제, 사용 방법이 모두 포함되어 있다. 공식 문서 링크는 다음과 같다.
Pandas 공식문서 링크 : https://pandas.pydata.org/docs/
pandas는 Series와 DataFrame라고 하는 두 가지 주요 데이터 구조를 제공하며, 이것들은 데이터 조작과 분석에 매우 중요한 역할을 한다.
Series: 1차원 배열로, 인덱스를 포함하며 데이터를 저장한다. (데이터에 고유한 인덱스를 부여하여 데이터에 접근할 수 있다.)
DataFrame: 2차원 테이블 형식의 데이터 구조로 여러 개의 Series가 모여 테이블을 이루며, 각 컬럼은 동일한 인덱스를 공유한다. (행과 열 모두 인덱스를 통해 접근할 수 있다.)
pandas의 Series는 NumPy의 1차원 배열과 유사하며, 인덱스와 데이터를 함께 저장한다. 데이터는 숫자, 문자열, 불리언, 또는 다른 데이터 타입을 포함할 수 있다.
pd.Series() 함수를 사용하여 생성할 수 있다. 예를 들어, 리스트나 NumPy 배열을 이용해 Series를 만들 수 있다. import pandas as pd
# 리스트로 Series 생성
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)
print(s.dtype)
a 10
b 20
c 30
d 40
dtype: int64
특징
dtype은 Series 내부의 데이터 타입을 나타낸다.데이터 선택
# 인덱스를 이용한 선택
print(s['b']) # 20DataFrame은 행(row)과 열(column)로 이루어진 2차원 데이터 구조로, 다양한 데이터 타입을 포함할 수 있다. DataFrame은 엑셀 시트나 SQL 테이블과 유사한 구조를 가지고 있다.
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
print(df)
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
3 David 40 Houston
- Series는 1차원 데이터 구조로, 데이터에 고유한 인덱스를 부여하여 데이터에 접근할 수 있다.
- DataFrame은 2차원 데이터 구조로, 여러 개의 Series가 모여 테이블을 이루며, 행과 열 모두 인덱스를 통해 접근할 수 있다.
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
}
df = pd.DataFrame(data)
Name Age
0 Alice 25
1 Bob 30
2 Charlie 35
3 David 40
print(df.iloc[1])
print(df.loc[1])
Name Bob
Age 30
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40]
}
# 인덱스 직접 지정
df = pd.DataFrame(data, index=['A', 'B', 'C', 'D'])
print(df)
Name Age
A Alice 25
B Bob 30
C Charlie 35
D David 40
print(df.loc['B'])
Name Bob
Age 30
Name: B, dtype: object
print(df.iloc[1])
Name Bob
Age 30
Name: B, dtype: object
print(df.loc[1])
KeyError: 1
왜냐하면 인덱스가 1이 아니라 A, B, C, D이기 때문.
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]
}
df = pd.DataFrame(data, index=['A', 'B', 'C'])
print(df)
Name Age
A Alice 25
B Bob 30
C Charlie 35
df['Country'] = ['Seoul', 'Busan', 'Incheon']
print(df)
Name Age Country
A Alice 25 Seoul
B Bob 30 Busan
C Charlie 35 Incheon
drop() 메서드를 사용하며, axis=1을 설정한다. Name Age Country
A Alice 25 Seoul
B Bob 30 Busan
C Charlie 35 Incheon
일 때
# 'Country' 열 삭제
df = df.drop('Country', axis=1)
print(df)
Name Age
A Alice 25
B Bob 30
C Charlie 35
drop() 메서드를 사용하고, 인덱스를 전달한다. Name Age Country
A Alice 25 Seoul
B Bob 30 Busan
C Charlie 35 Incheon
# 0번째 행 삭제
df = df.drop('A')
print(df)
Name Age Country
B Bob 30 Busan
C Charlie 35 Incheon
Name Age Country
A Alice 25 Seoul
B Bob 30 Busan
C Charlie 35 Incheon
# 'Age' 열의 값을 수정
df.loc['A', 'Age'] = 31
print(df)
A Alice 31 Seoul
B Bob 30 Busan
C Charlie 35 Incheon
astype() 메서드를 사용한다. # 'Age' 열을 float 타입으로 변경
df['Age'] = df['Age'].astype(float)
print(df.dtypes)
Name str
Age float64
Country str
dtype: object
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35]
}
df = pd.DataFrame(data, index=['A', 'B', 'C'])
df_filtered = df[df['Age'] >= 30]
print(df_filtered)
Name Age Country
B Bob 30 Busan
C Charlie 35 Incheon
df_filtered = df[(df['Age'] >= 30) & (df['Country'] == 'Busan')]
print(df_filtered)
Name Age Country
B Bob 30 Busan
arrays = [
['Group1', 'Group1', 'Group2', 'Group2'],
['Subgroup1', 'Subgroup2', 'Subgroup1', 'Subgroup2']
]
index = pd.MultiIndex.from_arrays(arrays, names=('Group', 'Subgroup'))
data = {'Value': [10, 20, 30, 40]}
df_multi = pd.DataFrame(data, index=index)
print(df_multi)
Value
Group Subgroup
Group1 Subgroup1 10
Subgroup2 20
Group2 Subgroup1 30
Subgroup2 40
반복되는 Group1, Group2는 보기 편하도록 첫 번째 행에만 표시됩니다.
# Group1의 데이터 선택
print(df_multi.loc['Group1'])
Value
Subgroup
Subgroup1 10
Subgroup2 20
# Group2의 Subgroup1 행
df_multi.loc[('Group2', 'Subgroup1')]
Value 30
Name: (Group2, Subgroup1), dtype: int64
핵심은 하나의 행에 단일 인덱스 대신 (Group, Subgroup)이라는 계층적인 인덱스 조합을 붙인다는 것입니다.
pandas는 날짜 및 시간 데이터를 처리하는 강력한 도구들을 제공한다. 시간 데이터를 다루기 위해 datetime 형식으로 변환한 후, 시계열 데이터 분석 및 시각화를 할 수 있다.
날짜 형식으로 변환
시계열 데이터를 처리하기 위해서는 날짜 정보를 datetime 형식으로 변환해야 한다. pd.to_datetime() 함수를 사용하여 문자열 형식의 날짜를 datetime 객체로 변환할 수 있다.
# 날짜 데이터를 datetime 형식으로 변환
import pandas as pd
df = pd.DataFrame({
'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
'Sales': [200, 300, 400, 500, 450]
})
df['Date'] = pd.to_datetime(
df['Month'] + ' 2026',
format='%b %Y'
)
print(df)
입력 문자열 읽는 규칙 내부 날짜 값 기본 출력
'Jan 2026' + '%b %Y' → datetime → 2026-01-01
Month Sales Date
0 Jan 200 2026-01-01
1 Feb 300 2026-02-01
2 Mar 400 2026-03-01
3 Apr 500 2026-04-01
4 May 450 2026-05-01
시간별 데이터 집계
시계열 데이터는 주기적으로 집계할 수 있다. 예를 들어, 월별, 일별, 연도별 데이터를 쉽게 집계할 수 있다.
# 월별 데이터를 날짜로 변환 후 집계 예시
df.set_index('Date', inplace=True)
monthly_sales = df.resample('ME').sum() # 'ME'은 월별 집계를 의미
print(monthly_sales)
Month Sales
Date
2024-01-31 Jan 200
2024-02-29 Feb 300
2024-03-31 Mar 400
2024-04-30 Apr 500
2024-05-31 May 450