오늘은 열 추가, 값 수정, 데이터 합치기에 대해 예제를 들어 설명하겠습니다.
1. 데이터 프레임 생성
[소스]
import pandas as pd
friend_dict_list = [
{'name': 'John', 'age' : 15, 'job' : 'student'},
{'name': 'Jenny', 'age' : 30, 'job' : 'developer'},
{'name': 'Nate', 'age' : 30, 'job' : 'teacher'}
]
df = pd.DataFrame(friend_dict_list, columns = ['name', 'age', 'job'])
[결과]
테스트 진행을 위해 위처럼 데이터 프레임을 생성해줍니다.
2. 열 추가하기
[소스]
df['salary'] = 0
[결과]
"salary"라는 열이 생성됨과 동시에 '0' 값이 추가 된 것을 확인할 수 있습니다.
3. numpy 이용하여 yes, no로 표시하기
[소스]
import numpy as np
df['salary'] = np.where(df['job'] != 'student', 'yes', 'no')
[결과]
위의 코드를 입력한 결과 "salary"컬럼에 "yes"와 "no"로 표시되는 것을 확인 할 수 있습니다.
"np.where()" 함수의 의미를 살펴보면 "job"이 "student"가 아니면 "yes"를 출력하고 맞다면 "no"를 출력하는 코드입니다.
즉, 다른 타 언어를 해보신 분들은 아시겠지만 3항 연산자와 문법도 비슷하고 동일한 역할을 하는 함수입니다.
4. 중간고사, 기말고사 점수 및 등급표 만들기
[데이터 프레임 생성]
import pandas as pd
friend_dict_list = [
{'name': 'John', 'midterm' : 95, 'final' : 85},
{'name': 'Jenny', 'midterm' : 85, 'final' : 80},
{'name': 'Nate', 'midterm' : 30, 'final' : 10}
]
df = pd.DataFrame(friend_dict_list, columns = ['name', 'midterm', 'final'])
[생성 결과]
4-1. 중간고사, 기말고사 점수 합구하기
[소스]
df['total'] = df['midterm'] + df['final']
[결과]
위와 같이 "midterm, final"의 값을 합한 값을 "total"이라는 컬럼을 추가함과 동시에 값을 설정할 수 있습니다.
4-2. 평균값 구하기
[소스]
df['average'] = df['total'] / 2
[결과]
"4-1"과 같은 방법으로 평균을 구할 수도 있습니다.
4-3. 점수를 "A, B, C " 등급으로 변환하기
[소스]
grades = [] #리스트 생성
for row in df['average'] : #'average' 값을 얻어옴
if row >= 90:
grades.append('A') #평균이 90점 이상이면 grades에 A를 추가
elif row >= 80:
grades.append('B')
else :
grades.append('C')
df['grade'] = grades #grade열에 순차대로 원소를 대입
[결과]
"average"값이 90이상이면 'A', 80이상이면 'B', 80미만일 경우 'C'라는 문자를 "grade" 컬럼에 추가하는 소스입니다.
4-4. "Pass"와 "Fail"로 합격, 불합격 표시하기
[소스]
def pass_or_fail(row):
if row != 'C':
return "Pass"
else:
return "Fail"
df.grade = df.grade.apply(pass_or_fail)
#각 row마다 값을 pass_or_fail로 인자로 넣어주고 리턴값을 df.grade에 순차대로 저장
[결과]
"pass_or_fail()"함수를 만들되 인자 값으로 "grade"(A 또는 B 또는 C)를 받습니다. 이후 "grade"값이 'C'가 아니면 "pass"를 리턴하고 'C'이면 "Fail"을 리턴합니다. 이후 "grade"(Pass 또는 Fail)라는 덮어쓰는 소스코드입니다.
5. 날짜 다루기
[데이터 프레임 생성]
import pandas as pd
date_list = [
{
'yyyy-mm-dd' : '2000-06-27'
},
{
'yyyy-mm-dd' : '2007-10-27'
}
]
df = pd.DataFrame(date_list, columns = ['yyyy-mm-dd'])
[결과]
"yyyy-mm-dd" 형식의 날짜를 사용하는 데이터 프레임을 생성하였습니다.
5-1. 연도만 표시하기
[소스]
def extract_year(row):
return row.split('-')[0]
df['year'] = df['yyyy-mm-dd'].apply(extract_year)
[결과]
extract_year()함수는 우리가 작성한 "yyyy-mm-dd" 형식의 날짜를 인자로 받아 split() 함수를 이용하여 '-'이 문자를 기준으로 데이터를 리스트형태로 분리한 후 맨 첫번째(연도)에 해당하는 값을 리턴해주고 있습니다.
이후 "year"컬럼에 값을 대입하는 소스입니다.
6. 데이터 프레임 합치기
[데이터프레임 생성]
import pandas as pd
friend_dict_list = [
{'name': 'John', 'midterm' : 95, 'final' : 85},
{'name': 'Jenny', 'midterm' : 85, 'final' : 80},
{'name': 'Nate', 'midterm' : 30, 'final' : 10}
]
df = pd.DataFrame(friend_dict_list, columns = ['name', 'midterm', 'final'])
[생성 결과]
[추가할 데이터 프레임 생성]
df2 = pd.DataFrame([
['Ben', 50, 50],
['Cho', 70, 80]
], columns = ['name', 'midterm', 'final'])
[생성 결과]
위와 같이 데이터프레임을 생성하였고 두개의 데이터프레임을 합쳐보겠습니다.
[데이터프레임 병합]
df.append(df2)
[병합 결과]
위처럼 두 개의 데이터프레임이 합쳐진 것을 확인할 수 있습니다.
하지만 Index가 중복되므로 완벽한 코드는 아닙니다.
Index를 새로 할당하여 병합하는 옵션을 추가해야합니다.
[Index 옵션 추가]
df.append(df2, ignore_index = True)
[추가 결과]
이처럼 "ignore_index = True" 옵션을 함께 써주면 기존의 인덱스는 무시되고 병합된 데이터프레임으로 인덱스를 새로 할당 해줍니다.
'프로그래밍 > Python' 카테고리의 다른 글
[Python Pandas] 9. 중복제거 (754) | 2020.12.09 |
---|---|
[Python Pandas] 8. 데이터 그룹 관리 (732) | 2020.12.09 |
[Python Pandas] 6. 행, 열 삭제 (723) | 2020.08.26 |
[Python Pandas] 5. 행,열 선택 필터 및 수정 (729) | 2020.08.21 |
[Python Pandas] 4. 데이터프레임 CSV 파일 저장 (707) | 2020.08.20 |