오늘은 열 추가, 값 수정, 데이터 합치기에 대해 예제를 들어 설명하겠습니다.

 

 

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" 옵션을 함께 써주면 기존의 인덱스는 무시되고 병합된 데이터프레임으로 인덱스를 새로 할당 해줍니다.

 

+ Recent posts