DataFrame在函数内部进行了修改

时间:2015-07-24 15:09:00

标签: python pandas

我面对一个我以前从未观察过的函数内部数据框的修改。有没有一种方法可以解决这个问题而不修改初始数据帧?

In[30]: def test(df):
    df['tt'] = np.nan
    return df

In[31]: dff = pd.DataFrame(data=[])

In[32]: dff

Out[32]: 
Empty DataFrame
Columns: []
Index: []
In[33]: df = test(dff)

In[34]: dff

Out[34]: 
Empty DataFrame
Columns: [tt]
Index: []

1 个答案:

答案 0 :(得分:13)

def test(df):
    df = df.copy(deep=True)
    df['tt'] = np.nan
    return df

如果将数据帧传递给函数并对其进行操作并返回相同的数据帧,那么您将获得修改后版本的相同数据帧。如果您想保留旧的数据框并使用修改创建新的数据框,那么根据定义,您必须拥有2个数据框。您传递的不需要修改的内容和修改后的内容。因此,如果您不想更改原始数据框,最好的办法是制作原始数据框的副本。在我的例子中,我反弹变量" df"在函数中新复制的数据帧。我使用了复制方法和参数" deep = True"制作数据框及其内容的副本。您可以在此处阅读更多内容:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.copy.html