gpt4 book ai didi

python - Pandas:无法在函数内附加和重新分配给 DataFrame

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:06 24 4
gpt4 key购买 nike

我想要做的是附加到作为参数传递给函数的 DataFrame 中,函数 f

在以下代码中完成的操作
df = pd.DataFrame(data=[(0,1), (0,1)], columns=['a', 'b'])

df
Out[58]:
a b
0 0 1
1 0 1

def f(df):
df['a'] = 1 # The first column will be modified
# However the following will have no effect
df = df.append(pd.DataFrame(data=[(0, 1)], columns=['a', 'b']))


f(df)
df
# As we see `append` didn't have an effect on the df
Out[61]:
a b
0 1 1
1 1 1

从上面的代码我们可以看出,如果没有返回DataFrame,append是没有效果的。发生这种情况有什么原因吗?

编辑:

我想我写完问题就明白了原因。由于 append 创建一个新对象,如果没有返回新对象,则赋值

df = df.append(pd.DataFrame(data=[(0, 1)], columns=['a', 'b']))

只会将新的 DataFrame 传递给 df 的引用副本,即函数调用生成的副本,不会传递给原始 df。因此,新的 DataFrame 丢失了。

最佳答案

你好像忘了return df:

def f(df):
df['a'] = 1 # The first column will be modified
# However the following will have no effect
df = df.append(pd.DataFrame(data=[(0, 1)], columns=['a', 'b']))
return df

print (f(df))
a b
0 1 1
1 1 1
0 0 1

或者更好:

def f(df):
df['a'] = 1 # The first column will be modified
return df.append(pd.DataFrame(data=[(0, 1)], columns=['a', 'b']), ignore_index=True)

print (f(df))
a b
0 1 1
1 1 1
2 0 1

我想如果检查DataFrame.append它返回新的对象,所以return是必要的。

关于python - Pandas:无法在函数内附加和重新分配给 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42090794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com