Pandas:无法附加和重新分配到函数内的 DataFrame

2024-03-03

我想要做的是附加到一个 DataFrame,该 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

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

Edit:

我想我写完问题后就明白了原因。自从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 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.append.html它返回新的object, so return是必要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:无法附加和重新分配到函数内的 DataFrame 的相关文章

随机推荐