데이터 프레임에서 선택한 항목이 원본 데이터 프레임의 복사본인지 또는 원본 뷰인지 결정할 때 Pandas가 사용하는 규칙에 대해 혼란스러워합니다.
예를 들어
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
나는 query
a가 사본을 반환하므로
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
원래 데이터 프레임에는 영향을주지 않습니다 df
. 또한 스칼라 또는 명명 된 슬라이스가 뷰를 반환하므로 다음과 같은 할당이
df.iloc[3] = 70
또는
df.ix[1,'B':'E'] = 222
변경 df
됩니다. 그러나 더 복잡한 경우에 관해서는 길을 잃었습니다. 예를 들면
df[df.C <= df.B] = 7654321
변경 df
하지만
df[df.C <= df.B].ix[:,'B':'E']
하지 않습니다.
내가 방금 놓친 판다 스가 사용하는 간단한 규칙이 있습니까? 이 특정한 경우에 무슨 일이 일어나고 있는지; 특히 특정 쿼리를 충족하는 데이터 프레임에서 모든 값 (또는 값의 하위 집합)을 변경하려면 어떻게해야합니까 (위의 마지막 예에서 시도한 것처럼)?
참고 : 이것은 이 질문 과 동일하지 않습니다 . 그리고 나는 문서를 읽었 지만 그것에 대해 깨닫지 못했습니다. 또한이 주제에 대한 "관련"질문을 읽었지만 Pandas가 사용하는 간단한 규칙과이를 적용하는 방법 (예 : 값 (또는 값의 하위 집합) 수정)이 여전히 누락되어 있습니다. 특정 쿼리를 충족하는 데이터 프레임에서.
.query
n numexpr에 의해 평가되기 때문에 항상 (뷰가 아닌) 무엇을하고 있기 때문에 복사본을 반환합니다. 나는 '규칙'에 그것을 추가 할 것입니다 그래서