2016-07-26 11 views
1

Hier ist das Problem. Ich benutze eine Funktion einer randomisierten Daten zurückzugeben,Python & Pandas: Wie man eine Kopie eines Datenrahmens zurückgibt?

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) 

jedoch die df (Quelldaten) und die temp_df (randomized_data) gleich ist. Hier ist das Ergebnis:

enter image description here

Wie kann ich die temp_df und df voneinander verschieden zu machen?


Ich finde ich kann df.copy() loswerden des Problems am Anfang der Funktion Hinzufügen

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

Aber ich bin mir nicht sicher, ob dies der richtige Weg ist, um damit umzugehen?

+4

Ja. Es ist. Also ... sollte diese Frage wahrscheinlich einfach löschen, weil 'df.copy()' die Antwort ist, die Sie bereits machen: P –

+0

@WayneWerner ist es möglich, '.copy()' eine Standardoption in benutzerdefinierten Funktionen zu machen ? Ich fühle es sehr reduddent, wenn Sie das 'df' zurückgeben wollen. Und dazu müssen Sie 'df = df.copy()' oft in der Funktion hinzufügen. – cqcn1991

+0

@WayneWerner Oder verwende ich es falsch? Gibt es eine bessere Möglichkeit, ein df in einer benutzerdefinierten Funktion zurückzugeben? – cqcn1991

Antwort

2

Verwendung DataFrame.assign():

def randomize_data(df): 
    return df.assign(c1=df.c1 + np.random.uniform(0, 1, df.shape[0])) 
Verwandte Themen