DataFrame在函数内部进行了修改

Ale*_*s G 7 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: []
Run Code Online (Sandbox Code Playgroud)

Sko*_*peo 19

def test(df):
    df = df.copy(deep=True)
    df['tt'] = np.nan
    return df
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!我已经使用 pandas 一段时间了,刚刚自己也遇到了这个问题。在数据帧和内部训练函数上训练模型时,它会对 df 进行一些更改,但不会返回它。这仍然会导致原始数据帧的修改。复制是唯一的方法吗? (2认同)