컬럼 추가 또는 변경하기
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'] = 0df.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'] / 2df.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'] = gradesdf.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
Fdf.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) + suffixdf['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 |
'개발공부 > 생성형 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 |