通过函数调用连接数据帧



我正在尝试连接单行数据帧 (df) 并将其添加到另一个数据帧 (df_all) 的末尾,使用以下代码:

import pandas as pd
import numpy as np
from IPython.display import display, HTML
global df_all    
df_all = pd.DataFrame()
def save_data(df):
df_all = pd.concat([df, df_all], axis=0)
display(df_all)
return df_all
def opt():
df = pd.DataFrame(np.random.randn(1, 4), columns=list('ABCD'))  # one row data
display(df)
save_data(df)

使用此循环,我想将 3 行保存到df_all。但是我收到一条错误消息(分配前引用的局部变量"df_all")

for i in range (3):
opt()
display(df_all)

我不相信依赖于全局变量的函数——它只是不卫生。

函数应该是纯粹的。首先,定义opt函数。这只会产生df,仅此而已。

def opt():
df = ...  # df is generated here
return df

接下来,定义save_data。好吧,我已将其重命名为augment,以更符合您正在做的事情。这会将两个数据帧连接在一起。

def augment(df, df_new):
return pd.concat([df, df_new], axis=1)

最后,你的主循环。所有状态都在这里维护,而不是在函数中—

df_all = pd.DataFrame()
for i in range(3):
df_all = augment(df_all, opt())
display(df_all)

global df_all移动到save_data(df)块。

def save_data(df):
global df_all    
df_all = pd.concat([df, df_all], axis=0)
display(df_all)
return df_all

此方法避免使用全局变量。将df_all作为参数传递给 opt()。

def save_data(df, df_all):
df_all = pd.concat([df, df_all], axis=0)
return df_all
def opt(df_all):
df = pd.DataFrame(np.random.randn(1, 4), columns=list('ABCD'))  # one row data
df_all = save_data(df, df_all)
return df_all
df_all = pd.DataFrame()
for i in range(3):
df_all = opt(df_all)
display(df_all)

最新更新