앞서 Series 의 기초를 정리해보았는데 이어서 DataFrame 을 알아보고자 한다.
DataFrame
2차원 자료구조 이며 컬럼, 인덱스, 데이터값 3가지의 구성요소로 이루어져있다. 행방향으로 순서를 보고, 컬럼으로 속성을 본다.
# A, B, C, D, E
math = [90, 92, 89, 90, 91]
eng = [89, 90, 93, 91, 88]
kor = [92, 91, 92, 90, 92]
temp = {'math':math, 'eng':eng, 'kor':kor}
grade_df = pd.DataFrame( temp, index=['A', 'B', 'C', 'D', 'E'] )
위 예시와 같이 DataFrame 을 생성한다. 마치 리스트로 이루어진 딕셔너리를 생성한 것 같아 보인다. 그렇지만 이를 DataFrame으로 만들어주었기 때문에, 2차원의 형태가 되었다. Series 와 마찬가지로 index 값을 따로 설정할 수 있다.
데이터 접근
컬럼을 통한 접근과 인덱스를 통한 접근 우선 두가지가 있다. 위에서 우리가 따로 인덱스를 설정해줬기 때문에 인덱스를 통한 접근에서 아래와 같이 사용할 수 있는 것이다. 여기서 인덱스를 통한 접근을 하고자 하려면 .loc 를 통해서 코드를 작성해줘야한다.
# 컬럼을 통한 접근
grade_df['math']
# 인덱스를 통한 접근
grade_df.loc['A']
데이터 값 하나에 접근하기 위해서는 컬럼과 인덱스를 지정해줘야한다. 여기서 주의해야할 점은 두번째 방법을 사용할 경우 데이터 값의 수정이 불가능하다는 것이다. 두번째 방법은 컬럼에 해당하는 값을 먼저 뽑아낸 뒤에 인덱스에 접근하기 때문에 수정이 불가하고, 데이터를 수정할 일이 있다면 첫번째 방법을 사용해서 바로 접근해야한다.
# 첫번째 방법
grade_df.loc['A', 'math']
# 두번째 방법
grade_df['math']['A']
함수 몇가지
정렬
sort_values() 함수를 통해 정렬을 할 수 있다. dataFrame 은 행을 기준으로 순서가 존재하기 때문에 컬럼명을 통해 데이터를 정렬한다. 두개 이상의 값을 기준으로 정렬하고자 할 때는 기준이 되는 컬럼을 리스트로 묶어서 넘겨준다. 'math' 로 정렬하고 동일한 데이터값이 있을 경우 'eng' 값으로 정렬한다. 정렬 디폴트는 오름차순이고, ascending=False 를 통해 내림차순으로 설정할 수 있다.
# 기본적인 정렬방법
grade_df.sort_values('math')
# 두개 이상의 값을 기준으로 정렬하고자 할 때
grade_df.sort_values(['math', 'eng'], ascending=False)
간단한 통계값 구하기
grade_df.describe()
필터링
필터링은 데이터를 조건을 통해서 가져오는 것이다. 컬럼을 기준으로 조건을 주기 때문에 컬럼명을 명시해야하는 것을 잊으면 안된다.
# 1. 어떤 값(컬럼)을 기준으로 조건주기
grade_df[ grade_df['math'] > 90 ]
두개 이상의 조건을 줄 때, 연산자 우선순위에 주의하며 괄호를 사용하여 필수로 구분해준다.
# 두개 이상의 조건을 줄 때
grade_df[ (grade_df['math'] > 90) | (grade_df['kor'] > 90)]
세개 이상의 조건일 때는 아래와 같이 조건을 따로 저장하여 변수값을 이용하는 것이 깔끔하고 알아보기 쉽다. 그리고 실수도 덜 한다.
# 3. 조건이 3개 이상일 때
cond1 = grade_df['math'] > 90
cond2 = grade_df['kor'] > 90
cond3 = grade_df['eng'] > 90
grade_df[ cond1 & cond2 & cond3 ]
연산
컬럼에 대한 결과물은 시리즈와 동일하다고 보면 될 것 같다. 그렇기 때문에 시리즈에서의 연산처럼 아래와 같이 동일하게 연산을 해줄 수 있다.
grade_df['total'] = grade_df['math'] + grade_df['eng'] + grade_df['kor']
'IT > 인공지능' 카테고리의 다른 글
[matplotlib] 데이터 별 시각화 처리 (0) | 2022.08.12 |
---|---|
[Pandas] Series 기초 (0) | 2022.08.10 |
[matplotlib] 한번에 그래프 여러개 그리기 (0) | 2022.07.31 |
colab에 접속하여 tensorflow, numpy, pandas, matplotlib 버전 출력해 보기 (0) | 2022.06.06 |
댓글