Python&;熊猫:如何返回数据帧的副本?

Python&;熊猫:如何返回数据帧的副本?,python,pandas,Python,Pandas,问题就在这里。我使用一个函数返回随机数据 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

问题就在这里。我使用一个函数返回随机数据

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)
但是,
df
(源数据)和
temp\u df
(随机数据)是相同的。结果如下:

如何使
temp_df
df
彼此不同


我发现我可以通过在函数开头添加
df.copy()
来解决这个问题

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

但我不确定这是否是正确的处理方法?

我认为您是对的,DataFrame.copy()有一个可选参数“deep”。您可以在

使用
DataFrame.assign()
中找到详细信息:


对它是。所以可能应该删除这个问题,因为
df.copy()
是答案,您已经在做了:P@WayneWerner是否可以将
.copy()
作为自定义函数中的默认选项?当您想返回
df
时,我觉得它非常红。这需要您在函数中多次添加
df=df.copy()
。@WayneWerner,或者,我是不是用错了?有没有更好的方法在自定义函数中返回df?您应该a)调用函数,如
do\u something(df.copy())
或b)在函数开始时调用
df=df.copy()
。df和temp\u df之间有什么区别?
def randomize_data(df):
    return df.assign(c1=df.c1 + np.random.uniform(0, 1, df.shape[0]))