2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

pandas - 4

2025. 4. 6. 18:01ㆍ개발공부/생성형 AI 기반 개발자 과정
728x90

컬럼 추가 또는 변경하기

friend_dict_list = [{'name': 'Jone', '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'])
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name age job
0 Jone 15 student
1 Jenny 30 developer
2 Nate 30 teacher

아래와 같은 방법으로 새로운 컬럼을 기본값과 함께 추가하실 수 있습니다.

df['salary'] = 0
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name age job salary
0 Jone 15 student 0
1 Jenny 30 developer 0
2 Nate 30 teacher 0

기존 컬럼값을 가지고 새로운 컬럼을 생성하는 예제입니다.

friend_dict_list = [{'name': 'Jone', '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'])
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name age job
0 Jone 15 student
1 Jenny 30 developer
2 Nate 30 teacher

넘파이를 사용하셔서, 한줄에 새로운 컬럼값을 생성하실 수도 있습니다.

import numpy as np
df['salary'] = np.where(df['job'] != 'student' , 'yes', 'no')
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name age job salary
0 Jone 15 student no
1 Jenny 30 developer yes
2 Nate 30 teacher yes
friend_dict_list = [{'name': 'John', 'midterm': 95, 'final': 85},
         {'name': 'Jenny', 'midterm': 85, 'final': 80},
         {'name': 'Nate', 'midterm': 10, 'final': 30}]
df = pd.DataFrame(friend_dict_list, columns = ['name', 'midterm', 'final'])
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final
0 John 95 85
1 Jenny 85 80
2 Nate 10 30

아래는 기존에 있는 두 컬럼값을 더해서 새로운 컬럼을 만드는 예제입니다.

df['total'] = df['midterm'] + df['final']
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final total
0 John 95 85 180
1 Jenny 85 80 165
2 Nate 10 30 40

기존의 컬럼을 사용하여 새로운 컬럼을 만드는 예제입니다.

df['average'] = df['total'] / 2
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final total average
0 John 95 85 180 90.0
1 Jenny 85 80 165 82.5
2 Nate 10 30 40 20.0

아래와 같이, 리스트에 조건별 값을 담아서, 새로운 컬럼으로 추가시킬 수 있습니다.

grades = []

for row in df['average']:
    if row >= 90:
        grades.append('A')
    elif row >= 80:
        grades.append('B')
    elif row >= 70:
        grades.append('C')
    else:
        grades.append('F')

df['grade'] = grades
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final total average grade
0 John 95 85 180 90.0 A
1 Jenny 85 80 165 82.5 B
2 Nate 10 30 40 20.0 F

apply 함수 사용 예제입니다.
apply를 사용하시면, 깔끔하게 컬럼의 값을 변경하는 코드를 구현하실 수 있습니다.

def pass_or_fail(row):
    print(row)
    if row != "F":
        return 'Pass'
    else:
        return 'Fail'
df.grade = df.grade.apply(pass_or_fail)
A
B
F
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final total average grade
0 John 95 85 180 90.0 Pass
1 Jenny 85 80 165 82.5 Pass
2 Nate 10 30 40 20.0 Fail

apply를 사용해서 연월일의 정보에서 연도만 빼보는 예제입니다.

date_list = [{'yyyy-mm-dd': '2000-06-27'},
         {'yyyy-mm-dd': '2002-09-24'},
         {'yyyy-mm-dd': '2005-12-20'}]
df = pd.DataFrame(date_list, columns = ['yyyy-mm-dd'])
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd
0 2000-06-27
1 2002-09-24
2 2005-12-20
def extract_year(row):
    return row.split('-')[0]
df['year'] = df['yyyy-mm-dd'].apply(extract_year)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd year
0 2000-06-27 2000
1 2002-09-24 2002
2 2005-12-20 2005

apply 함수에 파라미터 전달하기

키워드 파라미터를 사용하시면, apply가 적용된 함수에 파라미터를 전달하실 수 있습니다.

def extract_year(year, current_year):
    return current_year - int(year)
df['age'] = df['year'].apply(extract_year, current_year=2018)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd year age
0 2000-06-27 2000 18
1 2002-09-24 2002 16
2 2005-12-20 2005 13

apply 함수에 한 개 이상의 파라미터 전달하기

키워드 파라미터를 추가해주시면, 원하시는만큼의 파라미터를 함수에 전달 가능합니다.

def get_introduce(age, prefix, suffix):
    return prefix + str(age) + suffix
df['introduce'] = df['age'].apply(get_introduce, prefix="I am ", suffix=" years old")
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd year age introduce
0 2000-06-27 2000 18 I am 18 years old
1 2002-09-24 2002 16 I am 16 years old
2 2005-12-20 2005 13 I am 13 years old

apply 함수에 여러개의 컬럼을 동시에 전달하기

axis=1이라는 키워드 파라미터를 apply 함수에 전달해주면, 모든 컬럼을 지정된 함수에서 사용 가능합니다.

def get_introduce2(row):
    return "I was born in "+str(row.year)+" my age is "+str(row.age)

df.introduce = df.apply(get_introduce2, axis=1)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd year age introduce
0 2000-06-27 2000 18 I was born in 2000 my age is 18
1 2002-09-24 2002 16 I was born in 2002 my age is 16
2 2005-12-20 2005 13 I was born in 2005 my age is 13

Map 함수로 컬럼 추가 및 변경하기

파라미터로 함수를 전달하면 apply 함수와 동일하게 컬럼값을 추가 및 변경할 수 있습니다.

def extract_year(row):
    return row.split('-')[0]

date_list = [{'yyyy-mm-dd': '2000-06-27'},
         {'yyyy-mm-dd': '2002-09-24'},
         {'yyyy-mm-dd': '2005-12-20'}]
df = pd.DataFrame(date_list, columns = ['yyyy-mm-dd'])
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd
0 2000-06-27
1 2002-09-24
2 2005-12-20
df['year'] = df['yyyy-mm-dd'].map(extract_year)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

yyyy-mm-dd year
0 2000-06-27 2000
1 2002-09-24 2002
2 2005-12-20 2005

파라미터로 딕셔너리를 전달하면 컬럼값을 쉽게 원하는 값으로 변경 가능합니다.
기존의 컬럼값은 딕셔너리의 key로 사용되고, 해당되는 value의 값으로 컬럼값이 변경됩니다.

job_list = [{'age': 20, 'job': 'student'},
         {'age': 30, 'job': 'developer'},
         {'age': 30, 'job': 'teacher'}]
df = pd.DataFrame(job_list)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

age job
0 20 student
1 30 developer
2 30 teacher
df.job = df.job.map({"student":1,"developer":2,"teacher":3})
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

age job
0 20 1
1 30 2
2 30 3

Applymap

데이터프레임 전체의 각각의 값을 한번에 변경시키실 때 사용하시면 좋습니다.

x_y = [{'x': 5.5, 'y': -5.6},
         {'x': -5.2, 'y': 5.5},
         {'x': -1.6, 'y': -4.5}]
df = pd.DataFrame(x_y)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

x y
0 5.5 -5.6
1 -5.2 5.5
2 -1.6 -4.5
df = df.applymap(np.around)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

x y
0 6.0 -6.0
1 -5.0 6.0
2 -2.0 -4.0

데이터프레임에 로우 추가하기

friend_dict_list = [{'name': 'John', 'midterm': 95, 'final': 85},
         {'name': 'Jenny', 'midterm': 85, 'final': 80},
         {'name': 'Nate', 'midterm': 10, 'final': 30}]
df = pd.DataFrame(friend_dict_list, columns = ['name', 'midterm', 'final'])
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final
0 John 95 85
1 Jenny 85 80
2 Nate 10 30
df2 = pd.DataFrame([['Ben', 50,50]], columns = ['name', 'midterm', 'final'])
df2.head()

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final
0 Ben 50 50
df.append(df2, ignore_index=True)

.dataframe tbody tr th:only-of-type { vertical-align: middle; }

.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

name midterm final
0 John 95 85
1 Jenny 85 80
2 Nate 10 30
3 Ben 50 50
728x90

'개발공부 > 생성형 AI 기반 개발자 과정' 카테고리의 다른 글

pandas - 6  (0) 2025.04.06
pandas - 5  (0) 2025.04.06
pandas - 3  (0) 2025.04.06
pandas - 2  (0) 2025.04.06
pandas - 1  (0) 2025.04.03