참조 :
한 권으로 끝내는 <판다스 노트>
https://e-koreatech.step.or.kr/
Numpy 설치
!pip install numpy
Pandas의 타입
dtype | type |
int64 | integer |
float64 | decimal |
object | string |
bool | boolean |
datetime64 | date & time |
category | category |
dict 변환
1) dict -> Series : key -> Index
import pandas as pd
dic={'name':['hong', 'kim', 'heo'], 'kor' : [80, 90, 75],'eng' : [80, 95, 100]}
s=pd.Series(dic)
s
name [hong, kim, heo]
kor [80, 90, 75]
eng [80, 95, 100]
dtype: object
2) dict -> DataFrame : key -> Columns
df = pd.DataFrame(dic)
df
name | kor | eng | |
0 | hong | 80 | 80 |
1 | kim | 90 | 95 |
2 | heo | 75 | 100 |
3) dict -> DataFrame : key -> Columns, Index
df = pd.DataFrame(
{
"Name": {0: "Tom", 1: "Laura", 2: "Kevin", 3: "Julia", 4: "Jhon"},
"Birthday": {
0: "1997-10-10",
1: "2002-04-18",
2: "1981-11-12",
3: "2000-12-31",
4: "1999-04-09",
},
}
)
df
Name | Birthday | |
0 | Tom | 35713 |
1 | Laura | 37364 |
2 | Kevin | 29902 |
3 | Julia | 36891 |
4 | Jhon | 36259 |
색인 객체의 특징
- DataFrame, Series의 레코드를 고유하게 식별하는 객체
- 식별성 데이터를 1차원 배열로 가지고 있음
- 값의 중복을 허용하기 때문에 중복된 값을 선택하면 해당 값을 가진
- 미리 만들어서 안전하게 공유할 수 있음
- 변경이 불가능한 ndarray임 : 인덱스객체[인덱스번호]=값 으로 수정할 수 없음
- 색인 객체의 크기 변경이 불가능함
- 순서가 있고 슬라이스가 가능함
- reindex 명령을 이용한 변경은 가능
함수 | 설명 |
append | 색인 개체를 추가한 새로운 색인을 구함 |
insert | 지정된 위치에 색인이 추가된 새로운 색인을 구함 |
difference | 색인의 차집합을 구함 |
intersection | 색인의 교집합을 구함 |
union | 색인의 합집합을 구함 |
isin | 색인이 존재하는지를 구함(불리언 배열) |
drop | 지정된 값이 삭제된 새로운 색인을 구함 |
delete | 지정된 위치의 색인이 삭제된 새로운 색인을 구함 |
is_monotonic | 색인이 단조성을 가지는지를 구함 (가지면 True) |
is_unique | 중복되는 색인이 있는지를 구함 (없으면 True) |
unique | 색인에서 중복 요소를 제거하고 유일한 값만 구함 |
# index 연산자
연산결과 : 연산대상의 마지막 객체를 기준으로 indexing
결측치 처리 : fill_value로 처리 가능
import pandas as pd
s1 = pd.Series({'kor':80,'eng':90,'math':85})
s2 = pd.Series({'eng':70,'kor':75})
result = s1+s2
result
eng 160.0
kor 155.0
math NaN
dtype: float64
덧셈 | 뺄셈 | 곱셈 | 나눗셈 |
add | sub | mul | div |
s3 = s1.add(s2, fill_value=np.nan)
s3
# Series와 DataFrame 간 연산하기
- DataFrame의 행과 열을 통합 후 연산
- Series의 index를 DataFrame의 column에 맞추고 연산
- 짝이 안 맞으면 NaN 값을 반환
s = pd.Series([1,2,3,4], index=['a','b','c','d'])
df = pd.DataFrame([[1,2],[3,4]],columns=['a','b'])
result = s + df
result
a | b | c | d | |
0 | 2 | 4 | NaN | NaN |
1 | 4 | 6 | NaN | NaN |
DataFrame
pandas.DataFrame(data=None, index=None, columns=None, dtype=None)
df = pd.DataFrame(data=[[10, 40], [20, 50], [30, 60]], index=[1, 2, 3])
df
0 | 1 | |
1 | 10 | 40 |
2 | 20 | 50 |
3 | 30 | 60 |
1) 행 추가
df=pd.DataFrame({'name':['hong', 'kim', 'heo'], 'kor' : [80, 90, 75], 'eng' : [80, 95, 100]})
df.loc[3] = ['song',100,100]
df
name | kor | eng | |
0 | hong | 80 | 80 |
1 | kim | 90 | 95 |
2 | heo | 75 | 100 |
3 | song | 100 | 100 |
2) 열 추가
df['math'] = [70, 85, 90,90]
df
name | kor | eng | math | |
0 | hong | 80 | 80 | 70 |
1 | kim | 90 | 95 | 85 |
2 | heo | 75 | 100 | 90 |
3 | song | 100 | 100 | 90 |
3) 행 삭제하기 : inplace = True, 원 객체 변경 (기본값:False)
▪ DataFrame 객체명.drop(행 인덱스 또는 배열, axis=0, inplace=True 또는 False)
df.drop(3,inplace=True)
df
name | kor | eng | |
0 | hong | 80 | 80 |
1 | kim | 90 | 95 |
2 | heo | 75 | 100 |
4) 열 삭제하기
▪ DataFrame 객체명.drop(열명 또는 배열, axis=1, inplace=True 또는 False)
df.drop('math',axis=1)
df
name | kor | eng | |
0 | hong | 80 | 80 |
1 | kim | 90 | 95 |
2 | heo | 75 | 100 |
5) 행 선택
1개의 행 선택 | 범위지정 선택 | |
loc 이용 | DataFrame 객체명.loc[선택할 행이름] | DataFrame 객체명.loc[시작행이름:끝행이름] |
- 범위의 끝을 포함 | ||
iloc 이용 | DataFrame 객체명.iloc[선택할 인덱스] | DataFrame 객체명.iloc[시작인덱스:끝인덱스:슬라이싱간격] |
- 범위의 끝을 제외함 | ||
- 슬라이싱 간격은 생략할 수 있으며, 생략할 경우 1로 간주함 | ||
- 슬라이싱 간격을 -1로 지정하면 역순으로 제시됨 | ||
- 모든 행을 선택할 경우에는 시작인덱스와 끝인덱스를 지정하지 않음 |
df.loc[1:2]
name | kor | eng | math | |
1 | kim | 90 | 95 | 85 |
2 | heo | 75 | 100 | 90 |
df.iloc[1:3]
name | kor | eng | math | |
1 | kim | 90 | 95 | 85 |
2 | heo | 75 | 100 | 90 |
6) 열 선택
1개의 열 선택하기 | 여러 개의 열 선택하기 |
DataFrame 객체명[선택할 열이름] | DataFrame 객체명[[선택할 열이름1, 선택할 열이름2,…]] |
7) 원소 선택
loc 이용 | DataFrame 객체명.loc[행 인덱스 혹은 행명, 열 인덱스 혹은 열명] |
iloc 이용 | DataFrame 객체명.iloc[행 번호, 열 번호] |
df.loc[[1,2],'kor']
1 90
2 75
Name: kor, dtype: int64
8) index객체를 이용한 선택
i = df.index
i = i.drop(1) # Int64Index([0, 2], dtype='int64')
df.loc[i]
name | kor | eng | math | |
0 | hong | 80 | 80 | 70 |
2 | heo | 75 | 100 | 90 |
9) 위치 변경
- 행위치 변경 : reindex함수 이용
DataFrame객체.reindex (새로운 인덱스 배열, fill_value=값)
[ reindex 수행 순서 ]
기존 데이터 인덱스를 새로운 세트에 매치시켜 순서를 재조정
인덱스는 존재하나, 데이터가 없는 인덱스에 누락 값을 채움
df.reindex(index=[2, 0, 1])
name | kor | eng | math | |
2 | heo | 75 | 100 | 90 |
0 | hong | 80 | 80 | 70 |
1 | kim | 90 | 95 | 85 |
df.reindex([1,2,3], fill_value='nothing')
name | kor | eng | math | |
1 | kim | 90 | 95 | 85 |
2 | heo | 75 | 100 | 90 |
3 | nothing | nothing | nothing | nothing |
- 열 위치 변경
df[['math','kor','name']]
- 행/열 위치 변경
df.T #transpose
10) column -> index : 특정열을행인덱스로설정해줌
DataFrame객체.set_index(keys, drop=True, append=False, inplace=False)
매개변수 | 설명 |
keys | 인덱스로 설정할 열 또는 열 목록 |
drop | 기본값: True , 인덱스로 설정할 칼럼을 삭제 |
append | 기본값: False, 기존 색인에 열을 추가할지를 지정 |
inplace | 기본값: False, True이면 호출자 DataFrame을 제자리에서 수정 |
df.set_index('name')
kor | eng | math | |
name | |||
hong | 80 | 80 | 70 |
kim | 90 | 95 | 85 |
heo | 75 | 100 | 90 |
11) index 초기화 : reset_index함수
인덱스 값들을 DataFrame의 열로 전송하며, 단순 정수 인덱스로 초기화함
DataFrame객체.reset_index (drop=True, inplace=False)
매개변수 | 설명 |
drop | 기본값: True, 인덱스로 설정된 열을 DataFrame 내에서 삭제할지를 결정 |
inplace | 기본값: False, 원본 객체를 변경할지를 결정 |
df.reset_index(drop=False,inplace=True)
name | kor | eng | math | |
0 | hong | 80 | 80 | 70 |
1 | kim | 90 | 95 | 85 |
2 | heo | 75 | 100 | 90 |
'pandas' 카테고리의 다른 글
데이터 전처리, 추가, 삭제, 변환 (0) | 2023.12.12 |
---|---|
복사와 결측치 (0) | 2023.12.12 |
통계 (0) | 2023.12.11 |
조회, 정렬, 조건필터 (0) | 2023.12.11 |
Excel 파일 다루기 (0) | 2023.12.11 |
댓글