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]))