我很抱歉提出一个天真的问题,但此刻它让我发疯。我有一个数据帧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








暂无数据