2016-07-26 3 views
1

여기에 문제가 있습니다. 제가 Python & Pandas : 데이터 프레임 복사본을 반환하는 방법은 무엇입니까?

data1 = [3,5,7,3,2,6,1,6,7,8] 
data2 = [1,5,2,1,6,4,3,2,7,8] 
df = pd.DataFrame(data1, columns = ['c1']) 
df['c2'] = data2 

def randomize_data(df): 
    df['c1_ran'] = df['c1'].apply(lambda x: (x + np.random.uniform(0,1))) 
    df['c1']=df['c1_ran'] 
    # df.drop(['c1_ran'], 1, inplace=True) 
    return df 

temp_df = randomize_data(df) 

display(df) 
display(temp_df) 

가 그러나 df (소스 데이터) 및 temp_df (randomized_data)이 동일 무작위 데이터를 반환하는 함수를 사용한다.

enter image description here

는 어떻게 만들 수 temp_df 서로 다른 df 다음은 결과입니다?


가 나는 기능

def randomize_data(df): 
    df = df.copy() 

의 시작 부분에 df.copy()을 추가하여 문제를 제거 할 수 발견하지만이 그것을 다루는 올바른 방법입니다 있는지 확실하지 않습니다?

+4

예. 그것은. 그래서 ... 아마도'df.copy()'가 이미 답을하고 있기 때문에 아마도이 질문을 삭제해야합니다 : P –

+0

@WayneWerner는'.copy()'를 커스텀 함수의 기본 옵션으로 만들 수 있습니다 ? 나는 당신이'df'를 반환하기를 원할 때 매우 느슨하게 느낀다. 그리고이 함수에'df = df.copy()'를 많이 추가해야합니다. – cqcn1991

+0

@WayneWerner 아니면 잘못 사용하고 있습니까? 사용자 정의 함수에서 df를 반환하는 더 좋은 방법이 있습니까? – cqcn1991

답변

2

사용 DataFrame.assign()에서 자세한 내용을 찾을 수 있습니다

def randomize_data(df): 
    return df.assign(c1=df.c1 + np.random.uniform(0, 1, df.shape[0])) 
관련 문제