Python/NumPy | Pandas

[Pandas] update - 다른 데이터프레임 값으로 수정

비번변경 2024. 4. 26. 22:26

개요

두 개의 다른 데이터프레임이 있을 때, 한 데이터프레임의 컬럼의 데이터프레임의 컬럼 값으로 수정하고 싶다. 확인해 보니 Pandas에서 제공하는 update 함수를 이용할 수 있는 것 같다.

사용 방법을 적어둔다.

 

 

DataFrame.update

update는 데이터프레임의 컬럼을 다른 DataFrame의 컬럼으로 덮어씌운다. 단 결측치가 아닌 값만 사용하며. 반환값 없이 원본이 변경된다.

인덱스와 컬럼이 동일한 셀의 값으로 데이터프레임을 수정하기 때문에, 두 데이터프레임 간에는 같은 이름의 인덱스와 컬럼이 존재해야 한다. 만약 시리즈를 사용한다면 name 속성을 사용해 컬럼 이름을 동일하게 맞추어야 한다.

DataFrame.update(other, join='left', overwrite=True, filter_func=None, errors='ignore')

- other : 업데이트에 사용할 다른 데이터프레임을 지정한다.

- overwrite : False이면 원본 데이터프레임의 셀이 결측치일 때만 갱신한다.

- filter_func : 갱신할 값을 결정하는 함수를 전달할 수 있다.

 

 

테스트

아래 데이터프레임을 이용해 update 함수를 사용해본다.

df1 = pd.DataFrame({'A':[1, 2, 3],'B':[np.nan, 5, 6]})
df2 = pd.DataFrame({'B':[24, np.nan, 26],'C':[37, 38, 39]})

 

기본 사용

df1.update(df2)

df1을 df2를 사용해 갱신한다. 두 데이터프레임 간 일치하는 인덱스와 컬럼을 기준으로 업데이트되므로, 다음과 같이 업데이트된다. 단, df2[1, B]가 결측값이므로 df1[1, B]은 기존 값을 유지한다.

df1[0, B] = df2[0, B]
# df1[1, B] = df2[1, B]
df1[2, B] = df2[2, B]

 

결측값만 갱신

df1.update(df2, overwrite=False)

df1df1의 셀이 결측치인 경우만 df2의 값을 이용해 갱신한다. 이 글의 경우, 결측치는 df1[0, B]이므로 해당 셀만 업데이트된다.

 

조건에 맞는 값만 갱신

df1.update(df2, filter_func=lambda x: x > 3)

filter_func에 함수를 사용하여 데이터프레임의 값에 따라 갱신 여부를 결정할 수 있다.

이 글의 경우 셀이 3을 초과한 경우에만 업데이트하므로, df1[1, B] / df1[2, B]가 업데이트 대상이 된다. 하지만 df2[1, B]은 결측값이므로 실제로는 df2[2, B]만 사용해 업데이트된다.

 

 

 

참고 문서

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.update.html

https://wikidocs.net/153937