2012-06-01 3 views
5

중복 된 pandas DataFrame을 변경하는 데 문제가 있으며 원래의 DataFrame 인 에 수정 사항이 적용되지 않습니다.python의 DataFrame.apply pandas가 원본 및 중복 데이터 프레임을 모두 변경합니다.

다음은 예입니다.

In [70]: e = d 

In [71]: e['a'] = e['a'].apply(lambda x: x + 1) 
: 'A'에 적용하여

In [67]: d = [{'a':3, 'b':5}, {'a':1, 'b':1}] 

In [68]: d = DataFrame(d) 

In [69]: d 

Out[69]: 
    a b 
0 3 5 
1 1 1 

가 그럼 난 변수 'E'에 'D'dataframe을 할당하고 열을 어떤 임의의 수학을 적용 : 나는 사전의 목록에서 임의의 DataFrame을 만들 말

In [72]: e # duplicate DataFrame 
Out[72]: 
    a b 
0 4 5 
1 2 1 

In [73]: d # original DataFrame, notice the alterations to frame 'e' were also applied 
Out[73]: 
    a b 
0 4 5 
1 2 1 

내가 검색 한 B :

문제는 그 적용 기능이 분명히 난 내 인생에 대한 알아낼 수 없습니다 중복 DataFrame 'E'원래 DataFrame 'D'모두에 적용에서 발생 이것이 왜 그렇게 될지는 모르겠지만 아무 소용이없는 이유 때문에 팬더 문서 및 Google과 관련이 있습니다. 나는 여기서 무슨 일이 일어나고 있는지 이해할 수 없다.

요소 별 연산 (예 : e['a'] = [i + 1 for i in e['a']])을 사용하여 수학 연산을 시도했지만 문제가 지속됩니다. 팬더 데이터 프레임 유형에 내가 모르는 이상한 점이 있습니까? 누군가가 제공 할 수있는 통찰력에 감사드립니다.

답변

11

이것은 판다 관련 문제가 아닙니다. 파이썬에서, 할당 복사하지 않습니다 아무것도 : 새 DataFrame을 원하는 경우에

>>> a = [1,2,3] 
>>> b = a 
>>> b[0] = 'WHOA!' 
>>> a 
['WHOA!', 2, 3] 

e = d.copy()과 복사본을 만듭니다.

편집 : 이름이 인 은 아무 것도 복사하지 않음을 명확히해야합니다. 항목 또는 속성 (예 : a[1] = x 또는 a.foo = bar)에 대한 할당이 후드에서 메소드 호출로 변환되고 어떤 객체 종류에 따라 복사를 수행 할 수 있습니다. a입니다.

+0

그리고 제가 생각하기에 파이썬에 대해 잘 생각하고있었습니다! 답장을 보내 주셔서 감사합니다. 그것은 큰 도움이됩니다. – MikeGruz

+0

왜 b = a.copy()가 작동하지 않습니까? 주위에 어떤 일이 ... – Merlin

+0

"왜 작동하지 않는가"라는 말이 무슨 뜻인지 이해할 수 없습니다. 그것은 효과가있다. 아마도 변수 이름에 혼란 스러울 것입니까? 원래 질문에서 사용 된 이름이기 때문에'e = d.copy() '라고했습니다. – BrenBarn

관련 문제