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