10 minutes to pandas (판다스 실습)
참고 : pandas.pydata.org/pandas-docs/version/1.0.0/getting_started/10min.html
- numpy, pandas 사용하기
> import numpy as np
> import pandas as pd
numpy : 행렬이나 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬 라이브러리
- Object 생성하기
(1) Series 만들기
s = pd.Series([1, 3, 5, np.nan, 6, 8])
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
(2) DataFrame 만들기
dates = pd.date_range('20201110', periods=6)
# 6개의 날짜 정보가 들어간다
DatetimeIndex(['2020-11-10', '2020-11-11', '2020-11-12', '2020-11-13',
'2020-11-14', '2020-11-15'], dtype='datetime64[ns]', freq='D')
# 여러 타입의 데이터가 들아갈 수 있다.
df2 = pd.DataFrame({'A': 1.,
'B': pd.Timestamp('20201110'),
'C': pd.Series(1, index=list(range(4)), dtype='float32'),
'D': np.array([3] * 4, dtype='int32'),
'E': pd.Categorical(["test", "train", "test", "train"]),
'F': 'foo'})
A B C D E F
0 1.0 2020-11-10 1.0 3 test foo
1 1.0 2020-11-10 1.0 3 train foo
2 1.0 2020-11-10 1.0 3 test foo
3 1.0 2020-11-10 1.0 3 train foo
# df2.dtypes을 통해 데이터 타입 조회 가능
A float64
B datetime64[ns]
C float32
D int32
E category
F object
- Data 조회하기
# 지정하지 않으면 모든 데이터 출력
df2.head()
# 하위 3개의 데이터
df2.tail(3)
# index 조회하기
df2.index
# Int64Index([0, 1, 2, 3], dtype='int64') 출력
df2.columns
# Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
to_numpy() : pandas 객체를 numpy 배열 객체인 ndarray로 반환한다.
df2.to_numpy()
array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']],
dtype=object)
# 통계 요약
df2.describe()
A C D
count 4.0 4.0 4.0
mean 1.0 1.0 3.0
std 0.0 0.0 0.0
min 1.0 1.0 3.0
25% 1.0 1.0 3.0
50% 1.0 1.0 3.0
75% 1.0 1.0 3.0
max 1.0 1.0 3.0
# .sort_index()는 인덱스(index)를 기준으로, .sort_values()는 컬럼의 값을 기준으로 데이터 정렬
df2.sort_index(axis=1, ascending=False)
F E D C B A
0 foo test 3 1.0 2020-11-10 1.0
1 foo train 3 1.0 2020-11-10 1.0
2 foo test 3 1.0 2020-11-10 1.0
3 foo train 3 1.0 2020-11-10 1.0
# B 값을 기준으로 데이터 정렬
df2.sort_values(by='B')
# 여러 개의 컬럼 값을 기준으로 값을 정렬하고 싶을 때
df2.sort_values(by=['B', 'E'] ,ascending=False)
- 데이터 다루기(인덱싱)
- [] : 레이블이나 위치 정수를 기반으로 인덱싱한다.
- [ : ] : 슬라이싱을 활용하여 인덱싱한다.
- [boolean value] : 불린 벡터를 이용하여 인덱싱한다.
- loc[lable] : 레이블을 기반으로 인덱싱한다.
- iloc[position] : 위치 정수를 기반으로 인덱싱한다.
- at[label] : 레이블을 기반으로 인덱싱한다.
- iat[position] : 위치 정수를 기반으로 인덱싱한다.
# 단일 열을 얻기(Series)
df2['A']
0 1.0
1 1.0
2 1.0
3 1.0
Name: A, dtype: float64
# 행 분할하기 (0~2번째 행까지)
df2[0:3]
A B C D E F
0 1.0 2020-11-10 1.0 3 test foo
1 1.0 2020-11-10 1.0 3 train foo
2 1.0 2020-11-10 1.0 3 test foo
# 값을 기준으로 분할할 수도 있다
df2['2020-11-10':'2020-11-11']
# loc
# 열이 아닌 행 단위로 데이터 조회
df.loc[0]
# 1차원 Sereis 형태의 데이터가 리턴된다.
A 1
B 2020-11-10 00:00:00
C 1
D 3
E test
F foo
G one
Name: 0, dtype: object
df.loc[[0]]
# 2차원 배열을 입력하면 2차원인 DataFrame 형태의 데이터 출력
A B C D E F G
0 1.0 2020-11-10 1.0 3 test foo one
# 여러 행 명을 사용하여 데이터를 가져올 수도 있다.
# 0, 1번째 행 데이터를 가져온다.
df.loc[[0, 1]]
# 특정 행만 제외하고 가져올 수 있다.
# 2번째 행만 제외하고 데이터를 DataFrame 형태로 가져온다.
df.loc[df.index != 2]
A B C D E F G
0 1.0 2020-11-10 1.0 3 test foo one
1 1.0 2020-11-10 1.0 3 train foo one
3 1.0 2020-11-10 1.0 3 train foo three
# 열 조회하기
# 모든 행은 :으로 표시
# 쉼표(,)를 입력하고 열명을 입력하면 해당 열만 가져온다.
df.loc[:, 'A']
0 1.0
1 1.0
2 1.0
3 1.0
Name: A, dtype: float64
# DataFrame으로 가져오기
df.loc[:, ['A']]
# 특정 컬럼(B열)만 제외하고 가져오기
df.loc[:, df.columns != 'B']
A C D E F G
0 1.0 1.0 3 test foo one
1 1.0 1.0 3 train foo one
2 1.0 1.0 3 test foo two
3 1.0 1.0 3 train foo three
# 행과 열 정보 동시에 가져오기
# 실제 값 하나만 리턴된다. 1.0
df.loc[0, 'A']
# 2차원 DataFrame 리턴
df.loc[[0, 1], ['A', 'B']]
A B
0 1.0 2020-11-10
1 1.0 2020-11-10
loc, iloc의 차이 : loc는 레이블을 기반으로 데이터에 접근하지만, iloc는 위치 정수를 기반으로 데이터에 접근한다.
loc와 at의 차이 : 레이블을 통해 값에 접근한다는 점이 공통점이나, at은 하나의 요소에만 접근할 수 있다.
iloc와 iat의 차이 : 위치 정수를 통해 값에 접근한다는 점이 공통점이나, iat은 하나의 요소에만 접근할 수 있다.
# at
# Timestamp('2020-11-10 00:00:00'), 0행 B열에 해당하는 하나의 요소 리턴
df.at[0, 'B']
# iat
# 'test', 0행 4열의 데이터가 출력된다.
df.iat[0, 4]
# iloc
# 위치 정수를 반드시 입력해주어야 한다.
df.iloc[0]
A 1
B 2020-11-10 00:00:00
C 1
D 3
E test
F foo
G one
Name: 0, dtype: object
# 0행 6열의 값 하나를 가져온다. 'one'이 출력
df.iloc[0, 6]
불린 인덱싱을 사용하면 특정 조건에 맞는 데이터만 추출할 수 있다.
# Bool 인덱싱
# 한 번 더 []로 감싸주어야 한다, A가 1보다 클 경우 출력
df2[df2['A'] > 1]
# 필터링 사용하기, one three를 포함하고 있는 경우 출력
df = df2.copy()
df['G'] = ['one', 'one', 'two', 'three']
df[df['G'].isin(['one', 'three'])]
A B C D E F G
0 1.0 2020-11-10 1.0 3 test foo one
1 1.0 2020-11-10 1.0 3 train foo one
3 1.0 2020-11-10 1.0 3 train foo three
'CS > Data Science' 카테고리의 다른 글
[CS] 파이썬으로 시작하는 데이터 사이언스 (4) (0) | 2020.11.09 |
---|---|
[CS] 파이썬으로 시작하는 데이터 사이언스 (3) (0) | 2020.11.08 |
[CS] 파이썬으로 시작하는 데이터 사이언스 (2) (0) | 2020.11.08 |
[CS] 파이썬으로 시작하는 데이터 사이언스 (1) (0) | 2020.11.08 |