Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在函数中附加数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 在函数中附加数据帧

Python 在函数中附加数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我使用这个函数和APScheduler每小时向数据帧添加行。问题是每次运行时,它都会覆盖上一个条目,因此它不会真正“附加”任何内容 def SMSx(frame): SMS(frame) frame = frame.append(SMS.SMSdf) frame = frame[frame.a != "test"] frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'a', 'b', 'c', 'd

我使用这个函数和APScheduler每小时向数据帧添加行。问题是每次运行时,它都会覆盖上一个条目,因此它不会真正“附加”任何内容

def SMSx(frame):
    SMS(frame)
    frame = frame.append(SMS.SMSdf)
    frame = frame[frame.a != "test"]
    frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
    frame.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
    SMSx.frame = frame
如果我使用完全相同的代码(如下)并手动运行它,它就可以正常工作。我不太确定这里发生了什么。SMS.SMSdf是来自SMS功能的数据帧

SMS(frame)
frame = frame.append(SMS.SMSdf)
frame = frame[frame.a != "test"]
frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'Day', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
frame.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
SMSx.frame = frame
谢谢你的帮助

有效的代码:

def SMSx(frame_temp, frame_perm):
    SMS(frame_temp)
    try:
        frame_perm = DataFrame.from_csv('Sprint_Log.csv')
    except:
        pass
    frame_perm = frame_perm.append(SMS.SMSdf)
    frame_perm = frame_perm.drop_duplicates()
    frame_perm = frame_perm[frame_perm.Ready != "test"]
    frame_perm = DataFrame(frame_perm, columns=['Time', 'Hour', 'Date', 'Day', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
    frame_perm.to_csv('Sprint_Log.csv')
    SMSx.frame2 = frame_perm

我怀疑的问题是,您没有
返回更新的
变量。当您在函数作用域中为
SMSx
变量赋值时,函数一旦退出就会丢失。但是,我不确定这是如何工作的,因为您没有首先定义
SMSx
变量(它是当前函数的名称,或者也是一个全局变量?)


如果看不到代码的其余部分,就很难看到您正在尝试执行的操作。

是否有方法返回帧并运行
frame=SMSx(frame)
SMSx函数下的行?我要说清楚-您的代码实际上完全符合我的要求-我只需要将其全部放在一个函数中,这样我就可以运行它了APScheduler@ik629如果您从
SMSx(frame)
函数内部运行
SMSx(frame)
函数,您将以无限递归结束。查看APSScheduler,我看不到从函数中捕获返回值的方法。由于您仅每小时运行一次作业,是否可以使用文件来存储结果?查看
DataFrame
方法
.to_csv
.from_csv
,以及一个临时文件。感谢您的帮助!现在,该函数将数据帧保存到.csv文件中,然后在每次需要覆盖时调用它。再次感谢!代码已添加到原始注释中
def SMSx(frame):
    SMS(frame)
    frame = frame.append(SMS.SMSdf)
    frame = frame[frame.a != "test"]
    frame = DataFrame(frame, columns=['Time', 'Hour', 'Date', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
    frame.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
    return frame


while True:
     frame = SMSx(frame)  # The returned frame will be used on the next iteration