2013-04-24 5 views
4

나는 다른 dataframe의 복사 dataframe df2 있습니다df.columns와 df2.columns가 같은 개체입니까?

In [5]: df = DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]}) 
In [6]: df 
Out[6]: 
    A B C 
0 1 4 7 
1 2 5 8 
2 3 6 9 

In [7]: df2 = df.copy() 

을 따라서 하지 같은 객체입니다

In [8]: df is df2 
Out[8]: False 

In [9]: hex(id(df)) 
Out[9]: '0x89c6550L' 

In [10]: hex(id(df2)) 
Out[10]: '0x89c6a58L' 

하는 내 질문에 그 두 dataframes의 열 관련된다. 왜 df.columnsdf2.columns에서 반환 된 열 객체가 같은 객체입니까?

In [11]: df.columns is df2.columns 
Out[11]: True 

In [12]: hex(id(df.columns)) 
Out[12]: '0x89bfb38L' 

In [13]: hex(id(df2.columns)) 
Out[13]: '0x89bfb38L' 

하지만 변경하면 두 개의 개별 객체가됩니까?

In [14]: df2.rename(columns={"B":"D"}, inplace=True) 

In [15]: df.columns 
Out[15]: Index([A, B, C], dtype=object) 

In [16]: df2.columns 
Out[16]: Index([A, D, C], dtype=object) 

In [17]: df.columns is df2.columns 
Out[17]: False 

In [18]: hex(id(df.columns)) 
Out[18]: '0x89bfb38L' 

In [19]: hex(id(df2.columns)) 
Out[19]: '0x89bfc88L' 

누군가 무슨 일이 일어나고 있는지 설명 할 수 있습니까? df.columnsdf2.columns은 왜 처음부터 두 개의 개별 객체가 아닌가요?

+0

"DataFrame"이란 무엇입니까? –

+1

@brunodesthuilliers 질문 태그에서 알 수 있듯이 pandas 클래스 (Python Data Analysis Library)입니다. – Alexey

+0

@Alexey : 죄송합니다. 팬더 태그를 발견하지 못했습니다. –

답변

4

df.columns는 Index 개체입니다.

이들은 불변 객체 (문자열/int가 변경 불가능한 것과 같은 것으로, 실제 객체가 아닌 참조를 변경할 수 있음)입니다.

이렇게하면 공유가 가능하기 때문에 성능이 향상됩니다. 인덱스를 복사 할 때 실제로 메모리를 복사 할 필요가 없습니다. 때 당신은 '변화'하나,

는 거의 모든 팬더 작업의 당신에게 새로운 개체를 반환 (원래의 참조 반대) 당신이 정말로 새로운 객체를 얻고, 여기 참조 : 그래서 http://pandas.pydata.org/pandas-docs/stable/basics.html#copying

rename 복사 한 다음 인덱스 (열 및/또는 인덱스)에 할당하는 것과 동일합니다. 하지만이 할당 작업은 새 색인 객체를 만듭니다. (rename은이 작업의 편리한 방법 일뿐입니다)

관련 문제