2017-11-18 1 views
1

기존 DataFrame에 열을 삽입하고 싶습니다. 기존 데이터를 복사하지 않고 이상적입니다. 시도한 결과가 나중에 삽입 된 데이터에 Null 값이 포함 된 경우 결과로 생성되는 DataFrame에 대한 할당이 SettingWithCopyWarning을 생성합니다.SettingWithCopyWarning을 생성하지 않고 DataFrame에 열을 삽입하는 방법

import pandas as pd 

df = pd.DataFrame(data={'a': [1]}) 
df = df.assign(b=pd.Series(data=pd.NaT, index=df.index)) 
df['a'].iloc[0] = 5 

같은 경고에

df['b'] = pd.Series(data=pd.NaT, index=df.index) 
df.insert(column='b', loc=0, value=pd.NaT) 

결과 중 하나를 사용하여 assign 교체.

삽입 된 값이 null이 아닌 경우 (pd.NaT를 예 : 0으로 바꾸면) 경고가 생성되지 않으면 이상합니다. 그게 버그 야?

답변

1

chained assignment을 사용하는 df['a'].iloc[0] = 5과 같은 문제가있는 것 같습니다. 대신 다음을 시도하십시오.

+0

이상한 점은 Null 값을 null이 아닌 값으로 바꾸면 경고가 생성되지 않는다는 것입니다. 이것이 바로이 연쇄 할당이 잘 작동한다고 가정 한 이유입니다. 또한'at','loc','iat' 또는'iloc', AFAIK와는 작동하지 않는 행에 대해서는 위치 기반 선택을 사용하고 열에 대해서는 레이블 기반 선택을 사용하고 싶습니다. 'ix'는 더 이상 사용되지 않습니다. – Konstantin

+3

@Konstantin, mixed (position + label) 색인 생성을 위해 :'df.loc [df.index [position], 'column_name']' – MaxU

+0

그래,'.ix'와 결합 위치/레이블 기반 색인화에 관해서는 : 불편한 것처럼 보이지만,'.ix'는 특별히 그 이유 때문에 더 이상 사용되지 않았습니다. 개발자는 가능한 경우 모호성을 피하고자했습니다. 예를 들어 인덱스가 [1, 0]이고'.ix'를 사용했는데 위치 또는 레이블을 참조해야하는 경우입니까? –

관련 문제