热线电话:13121318867

登录
2019-03-11 阅读量: 751
构建新数据框并保留旧数据框?

我很抱歉提出一个天真的问题,但此刻它让我发疯。我有一个数据帧df1,并使用它创建新的数据帧df2,如下所示:

import pandas as pd

def NewDF(df):

df['sum']=df['a']+df['b']

return df

df1 =pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})

print(df1)

df2 =NewDF(df1)

print(df1)

这使

a b

0 1 4

1 2 5

2 3 6

a b sum

0 1 4 5

1 2 5 7

2 3 6 9

为什么我失去df1形状并获得第三列?我怎么能避免这个?

解决办法:DataFrames是mutable你应该显式地将副本传递给你的函数,或者让你的函数的第一步复制输入。否则,就像列表一样,您的功能所做的任何修改也适用于原始版本。

你的选择是:

def NewDF(df):

df = df.copy()

df['sum']=df['a']+df['b']

return df

df2 = NewDF(df1)

要么

df2 = NewDF(df1.copy())

在这里,我们可以看到原始实现中的所有内容都指向同一个对象

import pandas as pd

def NewDF(df):

print(id(df))

df['sum']=df['a']+df['b']

print(id(df))

return df

df1 =pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})

print(id(df1))

#2242099787480

df2 = NewDF(df1)

#2242099787480

#2242099787480

print(id(df2))

#2242099787480

11.0829
3
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子