Pandas
1. 목적 및 사용 용도
- 목적: 데이터 분석과 조작을 위해 설계된 라이브러리입니다.
- 사용 용도: 데이터 프레임 객체(DataFrame)를 사용하여 테이블 형태의 데이터를 쉽게 조작하고 분석할 수 있습니다. 데이터 정리, 필터링, 집계, 시계열 분석 등에 주로 사용됩니다.
- 구조: 판다스 데이터 프레임은 서로 다른 데이터 타입을 가질 수 있는 여러 열로 구성되며, 엑셀이나 SQL의 테이블과 유사한 형식을 가지고 있습니다.
2. 주요 데이터 구조
- Series: 일차원 배열과 유사한 데이터 구조로, 인덱스를 가지고 있어 특정 값을 쉽게 조회할 수 있습니다.
- DataFrame: 이차원 배열과 유사한 데이터 구조로, 각 열이 서로 다른 데이터 타입을 가질 수 있습니다. 행과 열에 대해 인덱스를 사용하여 데이터를 조작하고 분석할 수 있습니다.
3. 데이터 조작 및 기능
- 데이터 필터링, 그룹화, 집계, 결합, 피벗 테이블 생성 등의 데이터 조작에 중점을 둡니다.
- 결측치 처리, 데이터 정렬, 데이터 형식 변환 등 데이터 분석에 필요한 다양한 기능을 제공합니다.
- 시계열 데이터 처리에 강력한 기능을 가지고 있습니다.
4. 성능
- 데이터 조작 및 분석 기능이 풍부하지만, 데이터 구조가 더 복잡하기 때문에 넘파이에 비해 메모리 사용량이 많고, 성능이 떨어질 수 있습니다.
- 내부적으로 넘파이를 사용하여 성능을 개선하지만, 여전히 대규모 데이터 처리에서는 넘파이에 비해 느릴 수 있습니다.
요약
- 판다스는 주로 데이터 분석 및 조작에 사용됩니다.
- 판다스는 서로 다른 데이터 타입을 가진 테이블 형식의 데이터를 다루는 데 강점
import pandas as pd
import numpy as np
two_dimensional_list = [['dongwook',50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91,], ['jeongryun', 82, 83]]
my_df = pd.DataFrame(two_dimensional_list, columns=['name', 'eng_score', 'math_score'], index=['a','b','c','d'])
print(my_df)
'''
name eng_score math_score
a dongwook 50 86
b sineui 89 31
c ikjoong 68 91
d jeongryun 82 83
'''
★주의
같은 컬럼내에서는 동일한 타입이어야한다.
# 타입 확인
print(type(my_df)) #<class 'pandas.core.frame.DataFrame'>
# 컬럼 확인
print(my_df.columns) #Index(['name', 'eng_score', 'math_score'], dtype='object')
# 인덱스 확인
print(my_df.index) #Index(['a', 'b', 'c', 'd'], dtype='object')
print(my_df.dtypes)
'''
같은 칼럼내에서는 동일한 타입이어야한다.
name object
eng_score int64
math_score int64
dtype: object
'''
DataFrame 생성 방법
- 2차원 리스트나 2차원 numpy array로 DataFrame을 생성할 수 있다.
- pandas Series를 담고 있는 리스트로도 DataFrame을 만들 수 있다.
2차원 리스트
# 2차원리스트
two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]
# 리스트를 array로 바꾸기
two_dimensional_array = np.array(two_dimensional_list)
# 판다스 시리즈로 리스트에 저장
list_of_series = [
pd.Series(['dongwook', 50, 86]),
pd.Series(['sineui', 89, 31]),
pd.Series(['ikjoong', 68, 91]),
pd.Series(['yoonsoo', 88, 75])
]
데이터프레임 생성
# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(two_dimensional_list)
df2 = pd.DataFrame(two_dimensional_array)
df3 = pd.DataFrame(list_of_series)
print(df1)
'''
0 1 2
0 dongwook 50 86
1 sineui 89 31
2 ikjoong 68 91
3 yoonsoo 88 75
'''
파이썬 딕셔너리(dictionary)로 DataFrame 생성
- 딕셔너리의 key로는 column 이름 입력
- column에 해당하는 리스트, numpy array, 혹은 pandas Series를 딕셔너리의 value로 넣어주면 된다.
names = ['dongwook', 'sineui', 'ikjoong', 'yoonsoo']
english_scores = [50, 89, 68, 88]
math_scores = [86, 31, 91, 75]
dict1 = {
'name': names,
'english_score': english_scores,
'math_score': math_scores
}
dict2 = {
'name': np.array(names),
'english_score': np.array(english_scores),
'math_score': np.array(math_scores)
}
dict3 = {
'name': pd.Series(names),
'english_score': pd.Series(english_scores),
'math_score': pd.Series(math_scores)
}
# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)
print(df1)
리스트가 담긴 딕셔너리가 아니라, 딕셔너리가 담긴 리스트로도 DataFrame을 만들 수 있다.
my_list = [
{'name': 'dongwook', 'english_score': 50, 'math_score': 86},
{'name': 'sineui', 'english_score': 89, 'math_score': 31},
{'name': 'ikjoong', 'english_score': 68, 'math_score': 91},
{'name': 'yoonsoo', 'english_score': 88, 'math_score': 75}
]
df = pd.DataFrame(my_list)
print(df)