2016-06-14 78 views
1

讓我們假設一個我有一個簡單的數據幀df 而任何東西的dataframe熊貓數據框存在於方法之外。爲什麼

def alterDF(df): 
    df1['new column'] = df['some column'] + x 
    return df1 

在上述方法中我修改整個column爲x並將其保存到一個新的變量名的簡單方法。在內部的方法! 但是,當我檢查我的原始數據幀(即DF)時,我看到它也有新的列添加到它...

我知道我創建的原始dataframe存在的方法之外。但我希望方法內部發生的任何更改都應保留在那裏,除非通過我的方法中的return塊保存更改。

但是,我知道我錯了......這些更改也適用於我的方法,也出現在我的方法之外。怎麼會這樣?這是爲什麼?

+0

,(幾乎)一切都是通過逐引用_unless_你明確地改變引用(通過'name = new_reference')。 –

回答

2

可能是因爲你有這樣

df1 = df # by doing this you copy the reference also 

一條線,如果要複製一個數據幀使用

df1 = df.copy() 

而不是蟒蛇

+1

我還會添加一個[this]的鏈接(http://pandas.pydata.org/pandas-docs/stable/overview.html#mutability-and-copying-of-data) - 它可能有助於理解原因... – MaxU

+0

謝謝。但我正在尋找我的原始數據框的副本。想要創建一個新的數據幀,使用舊的數據幀作爲輸入的一部分。我只是想知道是否會有不同的方式來實現,而不更新原始數據幀。 –

+1

@ J.A.Cado這正是df1 = df.copy()所做的 – YOBA