DataFrame
▶ 라이브러리를 불러옵니다.
import numpy as np
import pandas as pd
▶ DataFrame 생성
데이터 프레임명 = pd.DataFrame()
df1 = pd.DataFrame([[15, '남', '덕영중'], [17, '여', '수리중']],
index=['준서', '예은'],
columns=['나이', '성별', '학교'])
▷ index, column 수정
df1.index = ['학생1','학생2']
df1.columns = ['연령','남녀','소속']
▶ 사전형 데이터를 불러와 DataFrame 생성
exam_data = {'이름':['서준','우현','인아'],
'수학':[90,80,70],
'영어':[98,89,95],
'음악':[85,95,100],
'체육':[100,90,90]}
df2 = pd.DataFrame(exam_data)
▶ 컬럼 및 데이터 추가
DataFrame객체 [추가하려는 컬럼명] = 데이터 값
df2['국어'] = 80
▷ 각 열마다 데이터 지정
df2['국어'] = 80, 60, 50
▶ row 추가
DataFrame 객체.loc['새로운 행 명'] = 데이터 값 (또는 배열) 또는 기존의 행
▶ 원소 값 변경
DataFrame 객체의 일부분 또는 원소 선택 = 변경하려는 값
# iloc를 사용
df6.iloc[0][3] = 100
# loc를 사용
df6.loc["서준"]['체육'] = 10 # 좋은 방식이 아닙니다. 에러도 발생하지 않으면서 원하지 않는 결과를 도출합니다.
# 서준의 음악 체육 점수 변경
# iloc를 사용
df6.iloc[0][2:3] = 50
# loc를 사용
df6.loc['서준', ['음악', '체육']] = 50
# 음악 90, 체육 60점 변경
# loc를 사용
df6.loc['서준', ['음악', '체육']] = 90, 60
.copy()
복사 당시의 데이터 프레임의 상태를 복사하는 깊은 복사.
복사본이 자신만의 데이터/Index를 갖게한다.
붙여넣을 데이터 프레임 = 복사할 데이터 프레임.copy()
.rename()
- index, column을 수정 합니다.
- inplace의 값을 True로 설정해야 원본 데이터의 값이 변경됩니다.
df1.rename(columns={'나이':'연령','성별':'남녀','학교':'소속'}, inplace=True)
df1.rename(index={'준서':'학생1','예은':'학생2'}, inplace=True)
loc & iloc
▶ loc
- location의 약어로, 인간이 읽을 수 있는 label 값으로 데이터에 접근합니다.
- 데이터 프레임의 행이나 컬럼에 label이나 boolean array로 접근합니다.
▶ iloc
- integer location의 약어로, 컴퓨터가 읽을 수 있는 indexing 값으로 데이터에 접근합니다.
- 데이터프레임의 행이나 컬럼에 인덱스 값으로 접근합니다.
▶ 데이터 선택
df6.iloc[0][3] = 100
df6.loc["서준"]['체육'] = 10 # 좋은 방식이 아닙니다. 에러도 발생하지 않으면서 원하지 않는 결과를 도출합니다.
# 서준의 음악 체육 점수 변경
df6.iloc[0][2:3] = 50
df6.loc['서준', ['음악', '체육']] = 50
# 음악 90, 체육 60점 변경
df6.loc['서준', ['음악', '체육']] = 90, 60
row, columns의 위치 바꾸기 (전치)
데이터프레임의 행과 열을 바꿉니다.
▶ 구문
df6.transpose()
df6.T
set_index()
특정 컬럼을 인덱스로 설정합니다.
▶ 구문
DataFrame객체.set_index(["컬럼"] 또는 "컬럼")
reindex()
- 데이터프레임의 행 인덱스를 새로운 배열로 재지정 합니다.
- 기존 객체를 변경하지 않고, 새로운 데이터프레임 객체를 반환합니다.
- 기존 데이터프레임에 존재하지 않는 인덱스가 새롭게 추가되는 경우, 그 인덱스의 값은 NaN값이 입력됩니다.
- 인자값 fill_value에 값을 저장할 수 있습니다.
▶ 구문
DataFrame객체.reindex(새로운 인덱스 배열)
▶ 예문
dict_data = {'c0':[1, 2, 3],
'c1':[4, 5, 6],
'c2':[7, 8, 9],
'c3':[10, 11, 12],
'c4':[13, 14, 15]}
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
ndf = df.reindex(['r0', 'r1', 'r2', 'r3', 'r4'], fill_value=0 )
reset_index()
행 인덱스 초기화
- 정수형 위치 인덱스로 초기화 합니다.
- 기존 행 인덱스는 컬럼으로 이동, 새로운 데이터프레임 객체를 반환합니다.
- 정수형 위치 인덱스로 초기화.
DataFrame객체.reset_index()
sort_index()
- 행 인덱스를 기준으로 데이터프레임 정렬.
- ascending 옵션을 사용하여 오름차순 또는 내림차순으로 설정.
- 새롭게 정렬된 데이터 프레임 객체를 반환.
DataFrame.sort_index()
ndf.sort_index()
ndf.sort_index(ascending = False)
sort_values()
- 특정 컬럼을 기준으로 데이터프레임 정렬.
- 새롭게 정렬된 데이터프레임 객체를 반환.
- ascending 옵션을 사용하여 오름차순 또는 내림차순으로 설정.
▷ 기본 구문
DataFrame.sort_values()
▷ 예문
ndf.sort_values(by = 'c1')
판다스 객체 산순열산의 내부 3단계 프로세스
- 로우/컬럼 인덱스 기준 모든 원소 정렬.
- 동일한 위치에 있는 원소끼리 1:1 대응.
- 1:1 대응이 되는 원소끼리 연산 처리. 이때 대응되는 원소가 없을시 Nan
시리스 VS 숫자
Series + 연산자 + Number
▶ 딕셔너리 데이터로 시리즈 생성후 과목별 점수 200으로 나누기
student1 = pd.Series({"국어" : 100,
"영어" : 80,
"수학" : 90})
student1 / 200
# 국어 0.50
# 영어 0.40
# 수학 0.45
# dtype: float64
시리스 VS 시리즈
시리즈와 시리즈 사이에 사칙연산 처리.
같은 인덱스를 가진 원소끼리 계산.
해당 인덱스에 연산 결과를 매칭하여 새 시리즈를 반환.
▶ 딕셔너리 데이터로 시리즈 데이터 생성후 "시리즈 + 시리즈" 연산
student1 = pd.Series({"국어" : 100,
"영어" : 80,
"수학" : 90})
student2 = pd.Series({"수학" : 100,
"국어" : 80,
"영어" : 90})
student1 + student2
# 국어 180
# 수학 190
# 영어 170
# dtype: int64
▶ NaN 값이 있는 시리즈의 산술연산
- 연산의 대상인 데이터가 존재하지 않기 때문에 NaN으로 처리
▶ 시리즈 연산 데이터 프레임 생성
st1 = pd.Series({'국어':np.nan, '영어':80, '수학':90})
st2 = pd.Series({'수학':80, '국어':90})
addition = st1 + st2
subtraction = st1 - st2
multiplication = st1 * st2
division = st1 /st2
result = pd.DataFrame([addition, subtraction, multiplication, division],
index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
result
▶ 연산 메서드 fill_value 옵션
객체 사이에 공통 인덱스가 없는 경우 fill_value 옵션을 통해 연산 NaN을 회피.
st1 = pd.Series({'국어':np.nan, '영어':80, '수학':90})
st2 = pd.Series({'수학':80, '국어':90})
add1 = st1.add(st2, fill_value = 0)
min1 = st1.sub(st2, fill_value = 0)
mul1 = st1.mul(st2, fill_value = 0)
div1 = st1.div(st2, fill_value = 0)
df9 = pd.DataFrame([add1, min1, mul1, div1], index = ["덧셈", "뺄셈", "곱셈", "나눗셈"])
데이터프레임 연산
데이터 프레임은 여러 시리즈가 모인것으로, 시리즈 연산을 확장하는 개념.
먼저 행/열 인덱스를 기준으로 정렬 후 1:1 대응되는 원소끼리 연산.
▶ 데이터프레임 VS 숫자
- 데이터프레임에 어떤 숫자를 더할 시 모든 원소에 숫자를 더한다.
- 기존 데이터프레임의 형태를 그대로 유지한 채, 원소 값만 새로운 값으로 바뀐다.
DataFrame + 연산자 + number
▷ titanic 데이터셋에서 age, fare 컬럼을 선택하여 데이터프레임을 생성하고 10을 더한다.
import seaborn as sns
titanic = sns.load_dataset("titanic")
titanic.loc[:, ['age', 'fare']] + 10
* titanic 데이터셋 : Seaborn 라이브러리에서 제공하는 데이터셋, 타이타닉호 탑승자에 대한 인적사항과 구조 여부 등을 정리한 자료.
▶ 데이터프레임 VS 데이터프레임
df_t = sns.load_dataset("titanic").loc[:, ['age', 'fare']]
df_t2 = df_t + 10
df_t2 - df_t
'Python' 카테고리의 다른 글
[Python] Boolean Indexing (0) | 2022.10.06 |
---|---|
[Python] 컬럼 순서 변경 (0) | 2022.10.06 |
[Python] Function Mapping (0) | 2022.10.06 |
[Python] TimeSeries (0) | 2022.10.06 |
[Python] 정규화 (0) | 2022.10.06 |