설명
파이썬 데이터 분석 라이브러리
데이터 조작, 정제, 분석, 시각화 등을 위한 다양한 기능을 제공
설치
> python -m pip install --upgrade pip
> pip install pandas
import numpy as np #짝꿍
import pandas as pd
SQL
복사
데이터 구조
pd.Series() → Series객체
•
1차원 구조로 되어 있는 데이터
pd.Series(data=None, index=None, dtype=None, name=None, copy=False)
Python
복사
Series 생성
data = {'a':1, 'b':2, 'c':3} # 딕셔너리
pd.Series(data=data, dtype=np.int16, name='dict')
# a 1
# b 2
# c 3
# Name: dict, dtype: int16
# 스칼라 값인 경우 인덱스를 제공해야 함
pd.Series(5.0, index=['a', 'b', 'c', 'd', 'e'])
# a 5.0
# b 5.0
# c 5.0
# d 5.0
# e 5.0
# dtype: float64
# np.random.randn: 가우시안 정규분포 난수
s = pd.Series(data=np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
s
# a -1.136282
# b -0.274201
# c 1.846150
# d -0.157367
# e -0.433985
# dtype: float64
Python
복사
슬라이싱/인덱스
•
Numpy와 같이 슬라이싱/인덱스과 같은 작업 가능
s[0]
# 1.3442340044624743
s[:3
# a 1.344234
# b -0.388342
# c 0.602582
# dtype: float64
s[s>s.median()], s.median()
# (a 1.344234
# d 2.037618
# dtype: float64, 0.6025819149869053)
'a' in s
# True
't' in s
# False
s.get('rr'
# 값 없음
s.get('a', 'None')
# -1.1362818047746768
# a -1.136282
# b -0.274201
# c 1.846150
# d -0.157367
# e -0.433985
# dtype: float64
s[0]
# -1.1362818047746768
s[[4,0,1]], a[[4,0,1]], c[[4,2,1]]
# (e -0.433985
# a -1.136282
# b -0.274201
# dtype: float64, e -0.433985
# a -1.136282
# b -0.274201
# dtype: float64, e -0.433985
# c 1.846150
# b -0.274201
# dtype: float64)
lst = [4,2,1]
########3
# 작업
####
a = s
c = s
s[lst], a[lst], c[lst]
# (e -0.433985
# c 1.846150
# b -0.274201
# dtype: float64, e -0.433985
# c 1.846150
# b -0.274201
# dtype: float64, e -0.433985
# c 1.846150
# b -0.274201
# dtype: float64)
s['a']
# -1.1362818047746768
s['a'] = 1.5
s
# a 1.500000
# b -0.274201
# c 1.846150
# d -0.157367
# e -0.433985
# dtype: float64
s[[0,1,2]] = [0,1,2]
s
# a 0.000000
# b 1.000000
# c 2.000000
# d -0.157367
# e -0.433985
# dtype: float64
Python
복사
abs(), exp()
np.abs(s) # 절대값 계산
# a 0.000000
# b 1.000000
# c 2.000000
# d 0.157367
# e 0.433985
# dtype: float64
np.exp(s) # 자연 상수 e^s[~]인 지수함수로 변환
# a 1.000000
# b 2.718282
# c 7.389056
# d 0.854391
# e 0.647922
# dtype: float64
Python
복사
numpy로 변환
s.to_numpy()
array([ 1.344234 , -0.38834187, 0.60258191, 2.03761822, -0.5560486 ])
Python
복사
pd.DataFrame() → DataFrame 객체
•
행과 열로 이루어진 2차원 데이터를 다루기 위한 객체
•
열은 각각의 변수를 나타내고, 행은 각각의 관측치를 나타냄
DataFrame 생성
data = {
"one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]),
"two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]),
}
df = pd.DataFrame(data=data)
df
Python
복사
리스트 → DataFrame
data = [['A', 1], ['B', 2], ['C', 3]]
df = pd.DataFrame(data, columns=['col1', 'col2'])
print(df)
# 출력 결과
# col1 col2
# 0 A 1
# 1 B 2
# 2 C 3
Python
복사
딕셔너리 변환 → DataFrame
data = {'col1': ['A', 'B', 'C'], 'col2': [1, 2, 3]}
df = pd.DataFrame(data)
print(df)
# 출력 결과
# col1 col2
# 0 A 1
# 1 B 2
# 2 C 3
Python
복사
데이터 변환 DataFrame → @@@
pd.DataFrame.to_parquet()
pd.DataFrame.to_csv()
pd.DataFrame.to_excel()
pd.DataFrame.to_dict()
df.to_dict()
# {'A': {'row_1': 3, 'row_2': 'a'},
# 'B': {'row_1': 2, 'row_2': 'b'},
# 'C': {'row_1': 1, 'row_2': 'c'},
# 'D': {'row_1': 0, 'row_2': 'd'}}
df.to_dict('series') # Series로 변환
# {'A': row_1 3
# row_2 a
# Name: A, dtype: object, 'B': row_1 2
# row_2 b
# Name: B, dtype: object, 'C': row_1 1
# row_2 c
# Name: C, dtype: object, 'D': row_1 0
# row_2 d
# Name: D, dtype: object}
df.to_dict('records') # > json형태
# [{'A': 3, 'B': 2, 'C': 1, 'D': 0}, {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}]
Python
복사
pd.DataFrame.to_json()
df.to_json()
# '{"A":{"row_1":3,"row_2":"a"},"B":{"row_1":2,"row_2":"b"},"C":{"row_1":1,"row_2":"c"},"D":{"row_1":0,"row_2":"d"}}'
df.to_json(orient="records")
# == df.to_dict('records')과 동일
# '[{"A":3,"B":2,"C":1,"D":0},{"A":"a","B":"b","C":"c","D":"d"}]'
Python
복사
데이터 조작
•
예시 데이터
data = {
"one": pd.Series([1.0, 2.0, 3.0], index=["a", "b", "c"]),
"two": pd.Series([1.0, 2.0, 3.0, 4.0], index=["a", "b", "c", "d"]),
}
df = pd.DataFrame(data=data)
df
# one two
# a 1.0 1.0
# b 2.0 2.0
# c 3.0 3.0
# d NaN 4.0
Python
복사
컬럼 선택
•
one 열의 데이터를 조회
df['one']
# a 1.0
# b 2.0
# c 3.0
# d NaN
# Name: one, dtype: float64
Python
복사
컬럼 조건 선택
•
one 열에서 2보다 큰 데이터의 boolean값 조회
df['one'] > 2
# a False
# b False
# c True
# d False
# Name: one, dtype: bool
Python
복사
•
리스트형태로 만들기
list(df['one'] > 2)
[False, False, True, False]
Python
복사
컬럼 추가
•
three 열을 추가하는데 데이터를 one열의 데이터를 복붙
df['three'] = df['one']+df['two']
df
# one two three
# a 1.0 1.0 2.0
# b 2.0 2.0 4.0
# c 3.0 3.0 6.0
# d NaN 4.0 NaN
Python
복사
컬럼 조건 추가
•
flag 열을 추가하는데 조건에 맞는 boolean값 조회
df['flag'] = df['one'] > 2
df
# one two three flag
# a 1.0 1.0 2.0 False
# b 2.0 2.0 4.0 False
# c 3.0 3.0 6.0 True
# d NaN 4.0 NaN False
# 열은 del / pop 를 사용할 수 있다.
Python
복사
컬럼 삭제
del : 부수효과 O
del df['two']
df
# one three flag
# a 1.0 2.0 False
# b 2.0 4.0 False
# c 3.0 6.0 True
# d NaN NaN False
Python
복사
pop() : 부수효과 O
three = df.pop("three")
three
# a 2.0
# b 4.0
# c 6.0
# d NaN
# Name: three, dtype: float64
Python
복사
부수효과 확인
df
# one
# a 1.0
# b 2.0
# c 3.0
# d NaN
Python
복사
컬럼 추가
df['foo'] = 'bar'
df
# one flag foo
# a 1.0 False bar
# b 2.0 False bar
# c 3.0 True bar
# d NaN False bar
df['one_trunc'] = df['one'][:2]
d
# one flag foo one_trunc
# a 1.0 False bar 1.0
# b 2.0 False bar 2.0
# c 3.0 True bar NaN
# d NaN False bar NaN
# 특정 위치의 열 추가
df.insert(1, 'bar', df['one'])
df
# one bar flag foo one_trunc
# a 1.0 1.0 False bar 1.0
# b 2.0 2.0 False bar 2.0
# c 3.0 3.0 True bar NaN
# d NaN NaN False bar NaN
df['bar'] = df['one']
df
# one two three bar
# a 1.0 1.0 2.0 1.0
# b 2.0 2.0 4.0 2.0
# c 3.0 3.0 6.0 3.0
# d NaN 4.0 NaN NaN
df.columns = ['one', 'bar', 'two', 'three']
df
# one bar two three
# a 1.0 1.0 2.0 1.0
# b 2.0 2.0 4.0 2.0
# c 3.0 3.0 6.0 3.0
# d NaN 4.0 NaN NaN
df.index, df.columns
# (Index(['a', 'b', 'c', 'd'], dtype='object'),
# Index(['one', 'bar', 'two', 'three'], dtype='object'))
Python
복사
열이나 행을 선택해 데이터 조회
•
열 선택하기
df['col1']
df[['col1', 'col2']]
Python
복사
•
행 선택하기
df.loc[0]
df.loc[[0, 1, 2]]
Python
복사