pandas DataFrame 할당에 대한 참고 사항 설명(index)

DataFrame 1열 할당 문제
설명, b의 열을 a에게 부여

상황 1:a, b index 설정 동일


다음 코드

import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))
b = pd.DataFrame(np.array([11,22,33,44]),index=list('abcd'),columns=['m'])
a['m'] = b['m']
print(a)
상술한 코드 결과는 다음과 같다

  w  x  y  z  m
a  0  1  2  3 11
b  4  5  6  7 22
c  8  9 10 11 33
d 12 13 14 15 44
상황은 가장 기본적인 상황이고 결과도 기대에 부합된다. 기대에 부합되는 이유는 a, b가 모두 같은 index를 설치하고 값 부여 조작은 index에 따라 오기 때문이다.만약 b가 Index를 설정하지 않고 기본 index를 사용한다면?

상황 2:b의 index는 기본값을 사용합니다


코드는 다음과 같습니다.

import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))
b = pd.DataFrame(np.array([11,22,33,44]),columns=['m'])
a['m'] = b['m']
print(a)
결과는 다음과 같다.

  w  x  y  z  m
a  0  1  2  3 NaN
b  4  5  6  7 NaN
c  8  9 10 11 NaN
d 12 13 14 15 NaN
상황 2, 결과는 상상을 초월했다. b의 index는 0, 1, 2, 3로 a의 index('a','b','c','d')와 다르다. 값을 부여하는 과정에서 a의 index에 따라 b에서 index와 같은 위치를 찾는 값이다. index가 다르기 때문에 a에게 NaN을 부여한다.

상황 3: b의 일부 Index는 a와 동일


코드는 다음과 같습니다.

import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))
b = pd.DataFrame(np.array([11,22,33,44]),index=list('arpb'),columns=['m'])
a['m'] = b['m']
print(a)
결과는 다음과 같다.

  w  x  y  z   m
a  0  1  2  3 11.0
b  4  5  6  7 44.0
c  8  9 10 11  NaN
d 12 13 14 15  NaN
상황 3 결과에서 알 수 있듯이 Index와 같은 줄만 값을 부여해야 성공할 수 있다

요약:


위에서 알 수 있듯이 Pandas DataFrame은 Index에 따라 엄격하게 값을 부여하고 Index가 다르면 NaN
추가:python 프로그래밍 과정에서 DataFrame이 특정 셀 값을 수정한 후 원 데이터가 변하지 않는 해결 방안
최근에 한 경기에 참가했는데, 그 안에서 데이터 세척 작업을 설계하였는데, 일부 이상값에 대해 수정을 해야 한다. 평소에 나는 이렇게 조작했다

df[condition]['column'].iloc[0:3] = ......
혹은

df[condition]['column'][0:3] = ......
안에condition은 조건을 만족시키는 논리적 표현식을 대표하고,column은 열의 이름을 나타낸다
일반적으로 여전히 유용하지만 간혹 오류가 발생할 수 있습니다. 주로 df[condition]라는 표현은python에서 규범에 맞지 않기 때문에 실행 후 칸에 값을 부여하는 데 실패하기 쉽습니다.여러 가지 방법을 시도한 후에 마지막에는 규범화된 loc나iloc표현을 사용한다

df.loc[[row condition],['column']] = ......
예:

NA.loc[[23,29,49],' '] = ......
혹은

df.iloc[np.where(condition),[1:3]]
loc에 연결된 것은 구체적인 행렬 이름이고iloc에 연결된 것은 조건을 만족시키는 행렬 이름에 대응하는 위치 숫자 목록입니다. 헷갈리지 마세요!
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기