Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在函数内部修改的数据帧_Python_Pandas - Fatal编程技术网

Python 在函数内部修改的数据帧

Python 在函数内部修改的数据帧,python,pandas,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

我面临一个我以前从未观察到的函数中的数据帧修改。是否有一种方法可以处理此问题,并且不修改初始数据帧

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: []

如果您将dataframe传递到函数中并对其进行操作并返回相同的dataframe,那么您将在修改后的版本中获得相同的dataframe。如果您想保留旧的数据帧并通过修改创建新的数据帧,那么根据定义,您必须有2个数据帧。您传入的不希望修改的一个和已修改的新的一个。因此,如果不想更改原始数据帧,最好是复制原始数据帧。在我的示例中,我将函数中的变量“df”反弹到新复制的数据帧。我使用copy方法,参数“deep=True”复制数据帧及其内容。您可以在此处阅读更多内容:

是否传递数据帧的副本?或者在函数中创建一个,然后变异并返回它?对参数进行变异并返回除
None
以外的任何内容都是不好的形式。这是一种解决方案,但内存效率不高。但这是我第一次面对这种情况。由于版本为0.16.2,您可以调用
.copy()
进行显式深度复制,与更改版本无关-对于传递给Python函数的所有可变对象,此行为都是相同的,既不是Pandas的特有行为,也不是v0.16.2的特有行为。您能告诉我们有关您的用例的更多信息吗?如果您想在函数末尾返回
df
,我认为您不能避免执行
.copy()
对于pyspark数据帧也是这样吗?
def test(df):
    df = df.copy(deep=True)
    df['tt'] = np.nan
    return df