Pandas:无法在函数内附加和重新分配数据帧

2024-04-26 15:13:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是附加到作为参数传递到函数的数据帧中,就像下面的代码中函数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,则没有任何效果。这有什么原因吗?在

编辑:

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

^{pr2}$

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


Tags: columnsthe数据函数代码dataframedfdata
1条回答
网友
1楼 · 发布于 2024-04-26 15:13:22

似乎您忘了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

或更好:

^{pr2}$

我认为如果检查^{}它返回新的object,那么{}是必要的。在

相关问题 更多 >