목록의 한 데이터 프레임에 새 열을 할당하면이 열을 다른 모든 데이터 프레임에 복사합니다. 예 :팬더 데이터 프레임 이상한 동작 목록
In [219]: a = [pd.DataFrame()]*2
In [220]: a[0]['a'] = [1,2,3]
In [221]: a[1]
Out[221]:
a
0 1
1 2
2 3
이것은 버그입니까? 그리고 그것을 막기 위해 무엇을 할 수 있습니까?
감사합니다!
목록의 한 데이터 프레임에 새 열을 할당하면이 열을 다른 모든 데이터 프레임에 복사합니다. 예 :팬더 데이터 프레임 이상한 동작 목록
In [219]: a = [pd.DataFrame()]*2
In [220]: a[0]['a'] = [1,2,3]
In [221]: a[1]
Out[221]:
a
0 1
1 2
2 3
이것은 버그입니까? 그리고 그것을 막기 위해 무엇을 할 수 있습니까?
감사합니다!
편집 : 지금 답장이에 대한 설명이있는 것을 볼 수^
나는이 아직 의해 발생 이해하지 않지만, 당신이 별도로 dataframes을 정의하여 주위 얻을 수 있습니다 목록에 넣기 전에.
In [2]: df1 = pd.DataFrame()
In [3]: df2 = pd.DataFrame()
In [4]: a = [df1, df2]
In [5]: a[0]['a'] = [1,2,3]
In [6]: a[0]
Out[6]:
a
0 1
1 2
2 3
In [7]: a[1]
Out[7]:
Empty DataFrame
Columns: []
Index: []
대답은 당신 때문에 당신은 각 항목이 같은 무언가 목록으로 끝낼 그 구문
x = [something]*n
으로 목록을 정의 할 때. 그것은 같은 객체를 참조, 복사본을 생성하지 않습니다
>>> import pandas as pd
>>> a=pd.DataFrame()
>>> g=[a]*2
>>> g
1: [Empty DataFrame
Columns: []
Index: [], Empty DataFrame
Columns: []
Index: []]
>>> id(g[0])
4: 129264216L
>>> id(g[1])
5: 129264216L
코멘트는을 통해 읽고 grok 수 할 몇 가지 유용한 예제를 가리키는.
>>> map(lambda x: pd.DataFrame(),range(2))
6: [Empty DataFrame
Columns: []
Index: [], Empty DataFrame
Columns: []
Index: []]
>>> [pd.DataFrame() for i in range(2)]
7: [Empty DataFrame
Columns: []
Index: [], Empty DataFrame
Columns: []
Index: []]
>>>
당신이'[] * n'와 목록을 초기화 할 때 동작을 알려져 :
그냥 목록을 인스턴스화하는 또 다른 방법을 사용하십시오 상황에서 그것을 방지하기 위해. 목록을 초기화하려면'a = [pdf (i) for range (2)]'를 사용하십시오. – Psidom감사합니다 Psidom! 호기심에서 왜 이런 일이 일어 났는지 알 수 있습니까? –
[ "최소한의 놀음"및 변경 가능 기본 인수] 가능한 복제본 (http://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument) – Boud