[Python] Pandas: 4. DataFrame 수정(replace)

Jae Gyeong Lee·2024년 4월 18일
import pandas as pd

data_list = [['A', 11],['B',22],['C',33]]
df = pd.DataFrame(data_list, columns = ['Name','Num'])

print(df)
>>>
  Name  Num
0    A   11
1    B   22
2    C   33

1. Column 추가

1.1. 같은 값 일괄 추가

df['test'] = 'a'
df
>>>
  Name Num test
0	A	11	a
1	B	22	a
2	C	33	a

1.2. list를 활용한 추가

text_list = ['a', 'b', 'c']
df['test'] = text_list; df
>>>
  Name Num test
0	A	11	a
1	B	22	b
2	C	33	c

1.3. 존재하는 column을 활용한 추가

df['test'] = df['Num'] * 2
df
>>>
  Name Num test
0	A	11	22
1	B	22	44
2	C	33	66

1.4. 존재하는 column들을 활용한 추가

df['test2'] = df['Num'] * df['test']
df
>>>
  Name	Num	test test2
0	A	11	22	242
1	B	22	44	968
2	C	33	66	2178

1.5. 특정 조건에 따라 값을 할당해 추가

import numpy as np
df['test'] = np.where(df['Num'] < 20, 'correct', 'wrong')
df
>>>
   Name	Num	test
0	A	11	correct
1	B	22	wrong
2	C	33	wrong
import numpy as np
df['test'] = np.where(df['Name'] == 'B', 'correct', 'wrong')
df
>>>
   Name	Num	test
0	A	11	wrong
1	B	22	correct
2	C	33	wrong

2 ~ 8.

df
>>>
	Name	Num	Etc
0	A	11	a
1	B	22	b
2	C	33	c
3	D	A	d
4	A	55	e

2. 특정 값만 수정(1개)

df.loc[row label 값, column label 값] = 수정할 값
df.loc[2,'Num'] = 'change'
>>>
	Name	Num	Etc
0	A	11	a
1	B	22	b
2	C	change	c
3	D	A	d
4	A	55	e

3. 특정 값들 수정(1개 이상)(replace)

df.replace(기존 값, 수정할 값, inplace = True)
  • inplace = True 설정 시, 원본데이터가 수정됨(default는 False)
  • 입력한 '기존 값'과 완전히 일치하는 경우만 '수정할 값'으로 변경
# 데이터프레임 내 모든 'A'를 'change'로 변경
df.replace('A', 'change', inplace = True)
>>>
Name	Num	Etc
0	change	11	a
1	B	22	b
2	C	33	c
3	D	A	d
4	change	55	e

4. 특정 칼럼 내 특정 값을 변경(replace)

df.replace({'column명': {'기존 값': '수정할 값'}})
#'Num' column 내 'A'를 'change'로 변경
df.replace({'Num': {'A': 'change'}})
>>>
	Name	Num	Etc
0	A	11	a
1	B	22	b
2	C	33	c
3	D	change	d
4	A	55	e

5. 특정 칼럼 내 특정 값을 변경(str.replace)

*** str.replace

  • 입력한 '기존 값'과 부분 일치하는 것(문자열만)들도 '수정할 값'으로 변경
df['column명'].str.replace('기존 값', '수정할 값')
df
>>>
  Name Num Etc
0   AA  11   a
1    B  22   b
2    C  33   c
3    D   A   d
4    A  55   e
#'Name' column 내 'A'를 'change'로 변경
df['Name'] = df['Name'].str.replace('A', 'change') #다시 할당해 줘야 함
>>>
Name	Num	Etc
0	changechange	11	a
1	B	22	b
2	C	33	c
3	D	A	d
4	change	55	e

6. 특정 Column 전체 수정

df[column label 값] = 수정할 값
change_col_list = ['change','change','change','change','change']
df['Num'] = change_col_list
>>>
	Name	Num	Etc
0	A	change	a
1	B	change	b
2	C	change	c
3	D	change	d
4	A	change	e

7. 특정 Row 전체 수정

df.loc[row label 값] = 수정할 값
change_row_list = ['change','change','change']
df.loc[2] = change_row_list
>>>
Name	Num	Etc
0	A	11	a
1	B	22	b
2	change	change	change
3	D	44	d
4	A	55	e

8. 특정 조건에 해당하는 값 수정

df.loc[특정 조건, 수정할 column label 값] = 수정할 값
change_condition = df['Name'] == 'A'
change_column = 'Name'
change_value = 'change'

df.loc[change_condition, change_column] = change_value
>>>
	Name	Num	Etc
0	change	11	a
1	B	22	b
2	C	33	c
3	D	A	d
4	change	55	e
profile
안녕하세요 반갑습니다. 공부한 내용들을 기록하고 있습니다.

0개의 댓글